创建 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 账号 IDDATABASE_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 价格。
限制
- 所有 BigQuery Omni 限制均适用。
- 您无法在 AWS Glue 联合数据集中的表中添加、删除或更新数据或元数据。
- 您无法在 AWS Glue 联合数据集中创建新表或具体化视图。
- 您只能通过 bq 工具和 API 创建 AWS Glue 联合数据集。不支持 Google Cloud 控制台。
- 不支持
INFORMATION_SCHEMA
视图。 - 不支持行级安全性、列级安全性、元数据缓存和数据遮盖。
- Avro 表不支持 Apache Hive 数据类型
UNION
。
后续步骤
- 详细了解 BigQuery Omni。
- 尝试完成搭配使用 BigQuery Omni 和 AWS 实验。