创建 AWS Glue 联合数据集

本文档介绍如何在 BigQuery 中创建与 AWS Glue 中的现有数据库关联的联合数据集。

联合数据集是 BigQuery 与外部数据源之间在数据集级层的连接。系统会根据相应的外部数据源中的表自动填充联合数据集中的表。您可以直接在 BigQuery 中查询这些表,但无法执行修改、添加或删除操作。但是,您在外部数据源中进行的任何更新都会自动反映在 BigQuery 中。

须知事项

确保您有可以访问 AWS Glue 数据的连接。

  • 如需创建或修改连接,请参阅连接到 Amazon S3,并在 BigQuery 的 AWS Identity and Access Management 政策中添加以下额外的 AWS Glue 政策语句:

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }
    

    替换以下内容:

    • REGION:AWS 区域,例如 us-east-1
    • ACCOUNT_ID::12 位数字的 AWS 账号 ID
    • DATABASE_NAME:AWS Glue 数据库名称

所需权限

如需获得创建联合数据集所需的权限,请让管理员向您授予 BigQuery Admin (roles/bigquery.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色包含创建联合数据集所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建联合数据集需要以下权限:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅 IAM 简介

创建联合数据集

如需创建联合数据集,请执行以下操作:

bq

在命令行环境中,使用 bq mk 命令创建数据集:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

替换以下内容:

  • LOCATION:BigQuery 中的新数据集的位置,例如 aws-us-east-1。创建数据集后,您无法更改其位置。您可以使用 .bigqueryrc 文件设置默认位置值。
  • AWS_GLUE_SOURCE:AWS Glue 数据库的 Amazon 资源名称 (ARN),例如 arn:aws:glue:us-east-1:123456789:database/test_database
  • PROJECT_ID:您的 BigQuery 项目 ID。
  • CONNECTION_LOCATION:您的 AWS 连接的位置,例如 aws-us-east-1
  • CONNECTION_NAME:您的 AWS 连接的名称。
  • DATASET_NAME:BigQuery 中的新数据集的名称。如需在非默认项目中创建数据集,请按照以下格式将项目 ID 添加到数据集名称:PROJECT_ID:DATASET_NAME

API

调用 datasets.insert 方法,并指定 AWS Glue 数据库的数据集资源externalDatasetReference 字段

列出联合数据集中的表

如需列出联合数据集中可用于查询的表,请参阅列出数据集

获取表信息

如需获取联合数据集中的表的相关信息(例如架构详细信息),请参阅获取表信息

控制对表的访问权限

如需管理对联合数据集中的表的访问权限,请参阅使用 IAM 控制对资源的访问权限

查询 AWS Glue 数据

查询联合数据集中的表的方法与查询任何其他 BigQuery 数据集中的表相同。

您可以查询以下格式的 AWS Glue 表:

  • CSV(压缩和未压缩均可)
  • JSON(压缩和未压缩均可)
  • Parquet
  • ORC
  • Avro
  • Iceberg

表映射详细信息

您授予访问权限的 AWS Glue 数据库中的每个表都在 BigQuery 数据集中显示为一个等效表。

形式

每个 BigQuery 表的格式由相应的 AWS Glue 表的以下字段决定:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

唯一的例外是 Iceberg 表,这类表使用 TableType (Table.Parameters["table_type"]) 字段。

例如,具有以下字段的 AWS Glue 表映射到 BigQuery 中的 ORC 表:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

位置

每个 BigQuery 表的位置由以下元素决定:

  • Iceberg 表:AWS Glue 表中的 Table.Parameters["metadata_location"] 字段
  • 非 Iceberg 未分区表:AWS Glue 表中的 Table.StorageDescriptor.Location 字段
  • 非 Iceberg 分区表:AWS Glue GetPartitions API

其他属性

此外,某些 AWS Glue 表属性会自动映射到 BigQuery 中的格式专用选项:

格式 SerializationLib AWS Glue 表值 BigQuery 选项
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

在联合数据集中创建视图

您无法在联合数据集中创建视图。但是,您可以在标准数据集中创建基于联合数据集中的表的视图。如需了解详情,请参阅创建视图

删除联合数据集

删除联合数据集的方法与删除任何其他 BigQuery 数据集相同。如需了解详情,请参阅删除数据集

价格

如需了解价格,请参阅 BigQuery Omni 价格

限制

后续步骤