创建 Blob Storage BigLake 表
本文档介绍了如何创建 Azure Blob Storage BigLake 表。BigLake 表允许您使用委托访问权限功能来查询 Blob Storage 中的数据。委托访问权限功能将对 BigLake 表的访问权限与对底层数据存储区的访问权限分离。
如需了解 BigQuery 和 Blob Storage 之间数据流动的方式,请参阅查询数据时的数据流。
准备工作
确保您拥有访问 Blob Storage 中的数据的连接。
所需的角色
如需获得创建外部表所需的权限,请让您的管理员为您授予数据集的 BigQuery Admin (roles/bigquery.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色可提供创建外部表所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需创建外部表,您需要拥有以下权限:
-
bigquery.tables.create
-
bigquery.connections.delegate
创建数据集
创建外部表之前,您需要在受支持的区域中创建数据集。从下列选项中选择一项:控制台
转到 BigQuery 页面。
- 在探索器窗格中,选择您要在其中创建数据集的项目。
- 展开 查看操作选项,然后点击创建数据集。
- 在创建数据集页面上,指定以下详细信息:
SQL
使用 CREATE SCHEMA
DDL 语句。以下示例会在 azure-eastus2
区域中创建一个数据集:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA mydataset OPTIONS ( location = 'azure-eastus2');
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
在命令行环境中,使用 bq mk
命令创建数据集:
bq --location=LOCATION mk \ --dataset \ PROJECT_ID:DATASET_NAME
--project_id
参数会替换默认项目。
替换以下内容:
LOCATION
:您的数据集所在的位置如需了解受支持的区域,请参阅位置。创建数据集后,您无法更改其位置。您可以使用
.bigqueryrc
文件设置位置的默认值。PROJECT_ID
:您的项目 IDDATASET_NAME
:您要创建的数据集的名称如需在非默认项目中创建数据集,请按照以下格式将项目 ID 添加到数据集名称:
PROJECT_ID:DATASET_NAME
。
对未分区数据创建 BigLake 表
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
在探索器窗格中,展开您的项目,然后选择数据集。
在数据集信息部分中,点击
创建表。在创建表页面的来源部分,执行以下操作:
- 在基于以下数据创建表部分,选择 Azure Blob Storage。
在选择 Azure Blob Storage 路径部分,按照以下格式输入 Blob Storage 路径:
azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH
替换以下内容:
AZURE_STORAGE_ACCOUNT_NAME
:Blob Storage 账号的名称。该账号的区域应与数据集所在的区域相同。CONTAINER_NAME
:Blob Storage 容器的名称。FILE_PATH
:指向 Blob Storage 数据的路径。例如,对于单个 CSV 文件,FILE_PATH
可以是myfile.csv
。
在文件格式部分,选择 Azure 中的数据格式。支持的格式包括 AVRO、CSV、DELTA_LAKE、ICEBERG、JSONL、ORC 和 PARQUET。
在目标部分,执行以下操作:
- 在数据集部分,选择相应的数据集。
- 在表字段中,输入表的名称。
- 验证表类型设置为外部表。
- 在连接 ID 部分,从下拉菜单中选择适当的连接 ID。如需了解连接,请参阅连接到 Blob Storage。
在架构部分中,您可以启用架构自动检测功能,也可以手动指定架构(如果您拥有源文件)。如果您没有源文件,则必须手动指定架构。
如需启用架构自动检测功能,请选择自动检测选项。
如需手动指定架构,请让自动检测选项处于未选中状态。启用以文本形式修改,然后以 JSON 数组形式输入表架构。
点击创建表。
SQL
如需创建 BigLake 表,请使用带有 WITH CONNECTION
子句的 CREATE EXTERNAL TABLE
语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME WITH CONNECTION `AZURE_LOCATION.CONNECTION_NAME` OPTIONS ( format = 'DATA_FORMAT', uris = ['azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH']);
替换以下内容:
DATASET_NAME
:您创建的数据集的名称TABLE_NAME
:您要为此表指定的名称AZURE_LOCATION
:Google Cloud 中的 Azure 位置,例如azure-eastus2
CONNECTION_NAME
:您创建的连接的名称DATA_FORMAT
:任何受支持的 BigQuery 联合格式,例如AVRO
、CSV
、DELTA_LAKE
或ICEBERG
(预览版)AZURE_STORAGE_ACCOUNT_NAME
:Blob Storage 账号的名称CONTAINER_NAME
:Blob Storage 容器的名称FILE_PATH
:指向 Blob Storage 数据的路径
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
示例:
CREATE EXTERNAL TABLE absdataset.abstable WITH CONNECTION `azure-eastus2.abs-read-conn` OPTIONS ( format = 'CSV', uris = ['azure://account_name.blob.core.windows.net/container/path/file.csv']);
bq
创建表定义文件:
bq mkdef \ --source_format=DATA_FORMAT \ --connection_id=AZURE_LOCATION.CONNECTION_NAME \ "azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH" > table_def
替换以下内容:
DATA_FORMAT
:任何受支持的 BigQuery 联合格式,例如AVRO
、CSV
、ICEBERG
或PARQUET
AZURE_LOCATION
:Google Cloud 中的 Azure 位置,例如azure-eastus2
CONNECTION_NAME
:您创建的连接的名称AZURE_STORAGE_ACCOUNT_NAME
:Blob Storage 账号的名称CONTAINER_NAME
:Blob Storage 容器的名称FILE_PATH
:指向 Blob Storage 数据的路径
接下来,创建 BigLake 表:
bq mk --external_table_definition=table_def DATASET_NAME.TABLE_NAME
替换以下内容:
DATASET_NAME
:您创建的数据集的名称TABLE_NAME
:您要为此表指定的名称
例如,以下命令会创建一个新的 BigLake 表 my_dataset.my_table
,该表可查询存储在 azure://account_name.blob.core.windows.net/container/path
路径且在 azure-eastus2
位置具有读取连接的 Blob Storage 数据:
bq mkdef \ --source_format=AVRO \ --connection_id=azure-eastus2.read-conn \ "azure://account_name.blob.core.windows.net/container/path" > table_def bq mk \ --external_table_definition=table_def my_dataset.my_table
API
调用 tables.insert
方法 API 方法,并在传入的 Table
资源中创建 ExternalDataConfiguration
。
指定 schema
属性或将 autodetect
属性设置为 true
,为受支持的数据源启用架构自动检测功能。
指定 connectionId
属性,以标识用于到 Blob Storage 的连接。
对分区数据创建 BigLake 表
您可以在 Blob Storage 中为 Hive 分区数据创建 BigLake 表。创建外部分区表后,您便无法更改分区键。您需要重新创建表才能更改分区键。
如需基于 Hive 分区数据创建 BigLake 表,请选择以下选项之一:
控制台
转到 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择数据集。
点击
查看操作,然后点击创建表。此时将打开创建表窗格。在来源部分,指定以下详细信息:
在从以下来源创建表部分,选择以下选项之一:
- Amazon S3
- Azure Blob Storage
使用通配符提供文件夹的路径。例如:
- 对于 Amazon S3:
s3://mybucket/*
- 对于 Blob Storage:
azure://mystorageaccount.blob.core.windows.net/mycontainer/*
该文件夹必须与您要创建、附加或覆盖的表所属的数据集位于同一位置。
- 对于 Amazon S3:
从文件格式列表中,选择文件类型。
选中源数据分区复选框,然后指定以下详细信息:
- 在选择来源 URI 前缀部分,输入 URI 前缀。例如
s3://mybucket/my_files
。 - 可选:如需对此表的所有查询使用分区过滤条件,请选中需要分区过滤条件复选框。要求使用分区过滤条件可以减少费用并提高性能。如需了解详情,请参阅要求对查询中的分区键使用谓词过滤条件。
在分区推理模式部分中,选择以下选项之一:
- 自动推断类型:将分区架构检测模式设置为
AUTO
。 - 所有列都是字符串:用于将分区架构检测模式设置为
STRINGS
。 - 自主提供:用于将分区架构检测模式设置为
CUSTOM
,并手动输入分区键的架构信息。如需了解详情,请参阅自定义分区键架构。
- 自动推断类型:将分区架构检测模式设置为
- 在选择来源 URI 前缀部分,输入 URI 前缀。例如
在目标部分,指定以下详细信息:
- 对于项目,选择要在其中创建表的项目。
- 在数据集部分,选择您要在其中创建表的数据集。
- 对于表,输入您要创建的表的名称。
- 在表类型部分,确认已选中外部表。
- 在连接 ID 部分,选择您之前创建的连接。
在架构部分中,您可以启用架构自动检测功能,也可以手动指定架构(如果您拥有源文件)。如果您没有源文件,则必须手动指定架构。
如需启用架构自动检测功能,请选择自动检测选项。
如需手动指定架构,请让自动检测选项处于未选中状态。启用以文本形式修改,然后以 JSON 数组形式输入表架构。
如需忽略额外列值与架构不匹配的行,请展开高级选项部分,然后选择未知值。
点击创建表。
SQL
使用 CREATE EXTERNAL TABLE
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS ( PARTITION_COLUMN PARTITION_COLUMN_TYPE, ) WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX", uris=['FILE_PATH'], format ="TABLE_FORMAT" );
替换以下内容:
PROJECT_ID
:要在其中创建表的项目的名称,例如myproject
DATASET
:要在其中创建表的 BigQuery 数据集的名称,例如mydataset
EXTERNAL_TABLE_NAME
:要创建的表的名称,例如mytable
PARTITION_COLUMN
:分区列的名称PARTITION_COLUMN_TYPE
:分区列的类型REGION
:包含连接的区域,例如us
CONNECTION_ID
:Spark 连接的名称,例如myconnection
HIVE_PARTITION_URI_PREFIX
:Hive 分区 URI 前缀,例如:s3://mybucket/
azure://mystorageaccount.blob.core.windows.net/mycontainer/
FILE_PATH
:要创建的外部表的数据源路径,例如:s3://mybucket/*.parquet
azure://mystorageaccount.blob.core.windows.net/mycontainer/*.parquet
TABLE_FORMAT
:要创建的表的格式,例如PARQUET
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
示例
以下示例基于 Amazon S3 中的分区数据创建了一个 BigLake 表。架构是自动检测的。
CREATE EXTERNAL TABLE `my_dataset.my_table` WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "s3://mybucket/products", uris = ['s3://mybucket/products/*'] );
以下示例基于 Blob Storage 中的分区数据创建 BigLake 表。架构已指定。
CREATE EXTERNAL TABLE `my_dataset.my_table` ( ProductId INTEGER, ProductName, STRING, ProductType, STRING ) WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "azure://mystorageaccount.blob.core.windows.net/mycontainer/products", uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/*'] );
bq
首先,使用 bq mkdef
命令创建表定义文件:
bq mkdef \ --source_format=SOURCE_FORMAT \ --connection_id=REGION.CONNECTION_ID \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ URIS > DEFINITION_FILE
替换以下内容:
SOURCE_FORMAT
:外部数据源的格式。例如CSV
。REGION
:包含连接的区域,例如us
。CONNECTION_ID
:Spark 连接的名称,例如myconnection
。PARTITIONING_MODE
:Hive 分区模式。请使用下列其中一个值:AUTO
:自动检测键名称和类型。STRINGS
:自动将键名称转换为字符串。CUSTOM
:对来源 URI 前缀中的键架构进行编码。
URI_SHARED_PREFIX
:来源 URI 前缀。BOOLEAN
:指定查询时是否需要谓词过滤条件。此标志是可选标志。默认值为false
。URIS
:Amazon S3 或 Blob Storage 文件夹的路径(使用通配符格式)。DEFINITION_FILE
:本地机器上表定义文件的路径。
如果 PARTITIONING_MODE
为 CUSTOM
,请使用以下格式将分区键架构包括在来源 URI 前缀中:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
创建表定义文件后,请使用 bq mk
命令来创建 BigLake 表:
bq mk --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
替换以下内容:
DEFINITION_FILE
:表定义文件的路径。DATASET_NAME
:包含该表的数据集的名称。TABLE_NAME
:您要创建的表的名称。SCHEMA
:指定 JSON 架构文件的路径,或者以field:data_type,field:data_type,...
格式指定架构。如需使用架构自动检测功能,请省略此参数。
示例
以下示例对 Amazon S3 数据使用 AUTO
Hive 分区模式:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
以下示例对 Amazon S3 数据使用 STRING
Hive 分区模式:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
s3://mybucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
以下示例对 Blob Storage 数据使用 CUSTOM
Hive 分区模式:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=azure://mystorageaccount.blob.core.windows.net/mycontainer/{dt:DATE}/{val:STRING} \
azure://mystorageaccount.blob.core.windows.net/mycontainer/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
如需使用 BigQuery API 设置 Hive 分区,请在创建表定义文件时在 ExternalDataConfiguration
对象中添加 hivePartitioningOptions
对象。如需创建 BigLake 表,您还必须指定 connectionId
字段的值。
如果将 hivePartitioningOptions.mode
字段设置为 CUSTOM
,则必须在 hivePartitioningOptions.sourceUriPrefix
字段中对分区键架构进行如下所示的编码:s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
如需在查询时强制使用谓词过滤条件,请将 hivePartitioningOptions.requirePartitionFilter
字段设置为 true
。
Delta Lake 表
Delta Lake 是一种支持 PB 级数据表的开源表格式。Delta Lake 表可以作为临时表和永久表进行查询,并且支持用作 BigLake 表。
架构同步
Delta Lake 维护规范化架构作为其元数据的一部分。您无法使用 JSON 元数据文件更新架构。如需更新架构,请执行以下操作:
使用带有
--autodetect_schema
标志的bq update
命令。bq update --autodetect_schema PROJECT_ID:DATASET.TABLE
替换以下内容:
PROJECT_ID
:要更新的表所属的项目的 IDDATASET
:包含要更新的表的数据集TABLE
:要更新的表
类型转换
BigQuery 会将 Delta Lake 数据类型转换为以下 BigQuery 数据类型:
Delta Lake 类型 | BigQuery 类型 |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC 或 BIG_NUMERIC ,具体取决于精度 |
date |
DATE |
time |
TIME |
timestamp (not partition column) |
TIMESTAMP |
timestamp (partition column) |
DATETIME |
string |
STRING |
binary |
BYTES |
array<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
限制
以下限制适用于 Delta Lake 表:
外部表限制适用于 Delta Lake 表。
Delta Lake 表仅在 BigQuery Omni 中受支持,并且具有相关限制。
您无法使用新的 JSON 元数据文件更新表,必须使用自动检测架构表更新操作。如需了解详情,请参阅架构同步。
BigLake 安全功能仅在通过 BigQuery 服务访问时保护 Delta Lake 表。
创建 Delta Lake 表
以下示例使用具有 Delta Lake 格式的 CREATE EXTERNAL
TABLE
语句创建外部表:
CREATE [OR REPLACE] EXTERNAL TABLE table_name WITH CONNECTION connection_name OPTIONS ( format = 'DELTA_LAKE', uris = ["parent_directory"] );
替换以下内容:
table_name:表格的名称。
connection_name:连接的名称。连接必须标识 Amazon S3 或 Blob Storage 来源。
parent_directory:父级目录的 URI。
使用 Delta Lake 进行跨云转移
以下示例使用 LOAD DATA
语句将数据加载到相应的表中:
LOAD DATA [INTO | OVERWRITE] table_name FROM FILES ( format = 'DELTA_LAKE', uris = ["parent_directory"] ) WITH CONNECTION connection_name;
如需查看跨云数据传输的更多示例,请参阅通过跨云操作加载数据。
查询 BigLake 表
如需了解详情,请参阅查询 Blob Storage 数据。
使用 INFORMATION_SCHEMA
查看资源元数据
您可以使用 INFORMATION_SCHEMA
视图查看资源元数据。当您查询 JOBS_BY_*
、JOBS_TIMELINE_BY_*
和 RESERVATION*
视图时,必须指定表区域所在的查询处理位置。如需了解 BigQuery Omni 位置,请参阅位置。对于所有其他系统表,不强制要求指定查询作业位置。
如需了解 BigQuery Omni 支持的系统表,请参阅限制。
如需查询 JOBS_*
和 RESERVATION*
系统表,请选择以下方法之一来指定处理位置:
控制台
转到 BigQuery 页面。
如果未显示编辑器标签页,则点击
编写新查询。点击更多 > 查询设置。系统随即会打开查询设置对话框。
在查询设置对话框中的其他设置 > 数据位置部分,选择 BigQuery Omni 区域所在的 BigQuery 区域。例如,如果 BigQuery Omni 区域为
aws-us-east-1
,请指定us-east4
。选择其余字段,然后点击保存。
bq
使用 --location
标志可以将作业的处理位置设置为 BigQuery Omni 区域所在的 BigQuery 区域。
例如,如果 BigQuery Omni 区域为 aws-us-east-1
,请指定 us-east4
。
示例
bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-azure-eastus2.INFORMATION_SCHEMA.JOBS limit 10;"
API
如果您以编程方式运行作业,请将位置参数设置为 BigQuery Omni 区域所在的 BigQuery 区域。
例如,如果 BigQuery Omni 区域为 aws-us-east-1
,请指定 us-east4
。
VPC Service Controls
您可以使用 VPC Service Controls 边界来限制从 BigQuery Omni 对外部云服务的访问,作为一层额外的安全防御。例如,VPC Service Controls 边界可以限制从 BigQuery Omni 表到特定 Amazon S3 存储桶或 Blob Storage 容器的导出。
如需详细了解 VPC Service Controls,请参阅 VPC Service Controls 概览。
所需权限
确保您拥有配置服务边界所需的权限。如需查看配置 VPC Service Controls 所需的 IAM 角色列表,请参阅 VPC Service Controls 文档中的使用 IAM 进行访问权限控制。
使用 Google Cloud 控制台设置 VPC Service Controls
在 Google Cloud 控制台导航菜单中,点击安全,然后点击 VPC Service Controls。
如需为 BigQuery Omni 设置 VPC Service Controls,请按照创建服务边界指南中的步骤操作,当您处于出站流量规则窗格中时,请按照以下步骤操作:
在出站流量规则面板中,点击添加规则。
在 API 客户端的属性部分中,从身份列表中选择一个选项。
选择转到外部资源的特性。
如需添加外部资源,请点击添加外部资源。
在添加外部资源对话框中,对于外部资源名称,输入有效的资源名称。例如:
对于 Amazon Simple Storage Service (Amazon S3):
s3://BUCKET_NAME
将 BUCKET_NAME 替换为您的 Amazon S3 存储桶的名称。
对于 Azure Blob Storage:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME
将 CONTAINER NAME 替换为 Blob Storage 容器的名称。
如需查看出站规则特性的列表,请参阅出站规则参考。
选择您要在外部资源上允许的方法:
- 如果要允许所有方法,请选择方法列表中的所有方法。
- 如果要允许特定方法,请选择所选方法,点击选择方法,然后选择允许在外部资源中使用的方法。
点击创建边界。
使用 gcloud CLI 设置 VPC Service Controls
如需使用 gcloud CLI 设置 VPC Service Controls,请按照以下步骤操作:
设置默认访问权限政策
访问权限政策是规定访问权限级别和服务边界的组织范围容器。如需了解如何设置默认访问权限政策或获取访问权限政策名称,请参阅管理访问权限政策。
创建出站流量政策输入文件
出站规则块定义了允许从边界内对该边界外的资源进行的访问。对于外部资源,externalResources
属性定义了允许从 VPC Service Controls 边界内访问的外部资源路径。
您可以使用 JSON 文件或 YAML 文件配置出站规则。以下示例使用 .yaml
格式:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" *OR* - permission: "externalResource.read" externalResources: - EXTERNAL_RESOURCE_PATH egressFrom: identityType: IDENTITY_TYPE *OR* identities: - serviceAccount:SERVICE_ACCOUNT
egressTo
:列出允许对边界外的指定项目中的 Google Cloud 资源执行的服务操作。operations
:列出允许满足from
块条件的客户端访问的可访问服务和操作或方法。serviceName
:为 BigQuery Omni 设置bigquery.googleapis.com
。methodSelectors
:列出满足from
条件的客户端可以访问的方法。如需查看服务的受限方法和权限,请参阅支持的服务方法限制。method
:有效的服务方法,也可以设置为\"*\"
以允许使用所有serviceName
方法。permission
:有效的服务权限,例如\"*\"
、externalResource.read
或externalResource.write
。允许需要此权限的操作访问边界外的资源。externalResources
:列出边界内的客户端可以访问的外部资源。将 EXTERNAL_RESOURCE_PATH 替换为有效的 Amazon S3 存储桶(例如s3://bucket_name
)或 Blob Storage 容器路径(例如azure://myaccount.blob.core.windows.net/container_name
)。egressFrom
:列出允许对边界内的指定项目中的 Google Cloud 资源执行的服务操作。identityType
或identities
:定义可访问边界外指定资源的身份类型。将 IDENTITY_TYPE 替换为下列其中一个有效值:ANY_IDENTITY
:允许所有身份。ANY_USER_ACCOUNT
:允许所有用户。ANY_SERVICE_ACCOUNT
:允许所有服务账号
identities
:列出可访问边界外的指定资源的服务账号。serviceAccount
(可选):将 SERVICE_ACCOUNT 替换为可以访问边界外的指定服务账号的服务账号。
示例
以下示例是一项允许从边界内对 AWS 中的 s3://mybucket
Amazon S3 位置执行出站操作的政策。
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - s3://mybucket - s3://mybucket2 egressFrom: identityType: ANY_IDENTITY
以下示例允许对 Blob Storage 容器执行出站流量操作:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
如需详细了解出站流量政策,请参阅出站规则参考。
添加出站流量政策
如需在创建新的服务边界时添加出站流量政策,请使用 gcloud access-context-manager perimeters create
命令。例如,以下命令会创建一个名为 omniPerimeter
的新边界,其中包含项目编号为 12345
的项目,限制 BigQuery API,并添加在 egress.yaml
文件中定义的出站流量政策:
gcloud access-context-manager perimeters create omniPerimeter \ --title="Omni Perimeter" \ --resources=projects/12345 \ --restricted-services=bigquery.googleapis.com \ --egress-policies=egress.yaml
如需将出站流量政策添加到现有服务边界,请使用 gcloud access-context-manager perimeters update
命令。例如,以下命令会将在 egress.yaml
文件中定义的出站流量政策添加到名为 omniPerimeter
的现有服务边界:
gcloud access-context-manager perimeters update omniPerimeter --set-egress-policies=egress.yaml
验证边界
如需验证边界,请使用 gcloud access-context-manager perimeters describe
命令:
gcloud access-context-manager perimeters describe PERIMETER_NAME
将 PERIMETER_NAME 替换为边界的名称。
例如,以下命令描述了边界 omniPerimeter
:
gcloud access-context-manager perimeters describe omniPerimeter
如需了解详情,请参阅管理服务边界。
允许 BigQuery Omni VPC 访问 Blob Storage
如需针对此功能提交反馈或请求支持,请发送电子邮件至 bq-omni-customer-support@google.com。
作为 BigQuery 管理员,您可以创建网络规则,以向 BigQuery Omni 授予对 Blob Storage 资源的访问权限。这样可确保只有已获授权的 BigQuery Omni VPC 才能与 Blob Storage 交互,从而增强数据的安全性。
为 BigQuery Omni VPC 应用网络规则
如需应用网络规则,请使用 Azure PowerShell 或 Terraform:
Azure PowerShell
运行以下命令,向您的存储账号添加网络规则,以将检索到的 BigQuery Omni 子网 ID 指定为 VirtualNetworkResourceId
。
Add-AzStorageAccountNetworkRule` -ResourceGroupName "RESOURCE_GROUP_NAME"` -Name "STORAGE_ACCOUNT_NAME"` -VirtualNetworkResourceId "SUBNET_ID1","SUBNET_ID2"
替换以下内容:
RESOURCE_GROUP_NAME
:资源组名称。STORAGE_ACCOUNT_NAME
:存储账号名称。SUBNET_ID1
、SUBNET_ID1
:子网 ID。您可以在本页面的表中找到此信息。
Terraform
将以下内容添加到 Terraform 配置文件中:
resource "azurerm_storage_account_network_rules" "example" { storage_account_name = "STORAGE_ACCOUNT_NAME" resource_group_name = "RESOURCE_GROUP_NAME" default_action = "Allow" bypass = ["Logging", "Metrics", "AzureServices"] virtual_network_subnet_ids = ["SUBNET_ID1","SUBNET_ID2"] }
替换以下内容:
STORAGE_ACCOUNT_NAME
:存储账号名称。RESOURCE_GROUP_NAME
:资源组名称。SUBNET_ID1
、SUBNET_ID1
:子网 ID。您可以在本页面的表中找到此信息。
BigQuery Omni VPC 资源 ID
区域 | 子网 ID |
---|---|
azure-eastus2 |
/subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus21-yurduaaaaa-private /subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus22-yurduaaaab-private |
限制
如需查看适用于基于 Amazon S3 和 Blob Storage 的 BigLake 表的完整限制列表,请参阅限制。
后续步骤
- 了解 BigQuery Omni。
- 了解 BigLake 表。
- 了解如何将查询结果导出到 Blob Storage。