建立 Azure Blob 儲存體 BigLake 資料表
Azure Blob 儲存體 BigLake 資料表可讓您使用存取權委派功能,從 BigQuery 查詢 Blob 儲存體中的資料。這種做法可將 BigLake 資料表的存取權與基礎資料儲存庫的存取權分開,因此使用者只需要資料表的權限。
本文說明如何建立 Azure Blob Storage BigLake 資料表。如要瞭解資料如何在 BigQuery 和 Blob Storage 之間流動,請參閱「查詢資料時的資料流」。
事前準備
必要的角色
如要取得建立外部資料表所需的權限,請要求管理員授予您資料集的 BigQuery 管理員 (roles/bigquery.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備建立外部資料表所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
您必須具備下列權限,才能建立外部資料表:
-
bigquery.tables.create -
bigquery.connections.delegate
建立資料集
建立外部資料表前,您必須在支援的區域建立資料集。選取下列其中一個選項:控制台
前往「BigQuery」頁面
- 點選左側窗格中的 「Explorer」。
- 在「Explorer」窗格中,選取要建立資料集的專案。
- 按一下 「View actions」(查看動作),然後點選「Create dataset」(建立資料集)。
- 在「建立資料集」頁面,指定下列詳細資料:
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」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」窗格中展開專案,點選「Datasets」(資料集),然後選取資料集。
在「資料集資訊」部分,點選 「建立資料表」。
在「建立資料表」頁面的「來源」部分,執行下列操作:
- 在「Create table from」(建立資料表來源) 部分,選取「Azure Blob Storage」(Azure Blob 儲存體)。
在「Select Azure Blob Storage path」(選取 Azure Blob 儲存體路徑),使用下列格式輸入 Blob 儲存體路徑:
azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH更改下列內容:
AZURE_STORAGE_ACCOUNT_NAME:Blob 儲存體帳戶名稱。帳戶區域應與資料集區域相同。CONTAINER_NAME:Blob 儲存體容器的名稱。FILE_PATH:指向 Blob 儲存體資料的資料路徑。舉例來說,如果是單一 CSV 檔案,FILE_PATH可以是myfile.csv。
在「File format」(檔案格式),選取 Azure 中的資料格式。支援的格式包括 AVRO、CSV、DELTA_LAKE、ICEBERG、JSONL、ORC 和 PARQUET。
在「目的地」部分,執行下列操作:
- 在「Dataset」(資料集) 部分,選擇適當的資料集。
- 在「Table」(資料表) 欄位中,輸入資料表名稱。
- 確認「Table type」(資料表類型) 已設為 [External table] (外部資料表)。
- 在「Connection ID」(連線 ID) 部分,從下拉式選單中選擇適當的連線 ID。如要瞭解連線,請參閱「連線至 Blob 儲存體」。
在「Schema」(結構定義) 部分,您可以啟用結構定義自動偵測功能,也可以手動指定結構定義 (如有來源檔案)。如果沒有來源檔案,則必須手動指定結構定義。
如要啟用結構定義自動偵測功能,請選取「自動偵測」選項。
如要手動指定結構定義,請勿勾選「Auto-detect」(自動偵測) 選項。啟用「Edit as text」(以文字形式編輯),並以 JSON 陣列形式輸入資料表結構定義。
點選「建立資料表」。
SQL
如要建立 BigLake 資料表,請使用 CREATE EXTERNAL TABLE 陳述式和 WITH CONNECTION 子句:
前往 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-eastus2CONNECTION_NAME:您建立的連線名稱DATA_FORMAT:任何支援的 BigQuery 聯合格式,例如AVRO、CSV、DELTA_LAKE或ICEBERG(預先發布版)AZURE_STORAGE_ACCOUNT_NAME:Blob 儲存體帳戶名稱CONTAINER_NAME:Blob 儲存體容器名稱FILE_PATH:指向 Blob 儲存體資料的資料路徑
按一下「 執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例:
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或PARQUETAZURE_LOCATION: Google Cloud中的 Azure 位置,例如azure-eastus2CONNECTION_NAME:您建立的連線名稱AZURE_STORAGE_ACCOUNT_NAME:Blob 儲存體帳戶名稱CONTAINER_NAME:Blob 儲存體容器的名稱FILE_PATH:指向 Blob 儲存體資料的資料路徑
接著,建立 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 的 Blob 儲存體資料,並在位置 azure-eastus2 建立讀取連線:
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 儲存體的連線。
依據分區資料建立 BigLake 資料表
您可以為 Blob Storage 中的 Hive 分區資料建立 BigLake 資料表。建立外部資料表後,就無法變更分區鍵。如要變更分區鍵,必須重新建立資料表。
如要根據 Hive 分區資料建立 BigLake 資料表,請選取下列其中一個選項:
控制台
前往「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」窗格中展開專案,點選「Datasets」(資料集),然後選取資料集。
按一下 [Create table] (建立資料表)。「建立資料表」窗格隨即開啟。
在「Source」(來源) 部分,指定下列詳細資料:
在「Create table from」(建立資料表來源) 部分,選取下列其中一個選項:
- Amazon S3
- Azure Blob 儲存體
使用萬用字元提供資料夾路徑。例如:
- Amazon S3:
s3://mybucket/* - Blob 儲存體:
azure://mystorageaccount.blob.core.windows.net/mycontainer/*
資料夾必須與資料集位於相同位置,且資料集包含您要建立、附加或覆寫的資料表。
- Amazon S3:
從「File format」(檔案格式) 清單中選取檔案類型。
選取「Source data partitioning」(來源資料分區) 核取方塊,然後指定下列詳細資料:
- 在「Select Source URI Prefix」(選取來源 URI 前置字串),輸入 URI 前置字串。例如:
s3://mybucket/my_files。 - 選用:如要對這個資料表的所有查詢要求分區篩選器,請勾選「Require partition filter」(必須使用分區篩選器) 核取方塊。規定必須使用分區篩選器,可降低費用並提高成效。詳情請參閱「要求在查詢中對分區索引鍵使用述詞篩選器」。
在「Partition inference mode」(分區推論模式) 部分,選取下列其中一個選項:
- 「Automatically infer types」(自動推論類型):將分區結構定義偵測模式設為
AUTO。 - 將所有資料欄視為字串:將分區結構定義偵測模式設為
STRINGS。 - 「Provide my own」(自行提供):將分區結構定義偵測模式設為
CUSTOM,並手動輸入分區索引鍵的結構定義資訊。詳情請參閱「自訂分區索引鍵結構定義」。
- 「Automatically infer types」(自動推論類型):將分區結構定義偵測模式設為
- 在「Select Source URI Prefix」(選取來源 URI 前置字串),輸入 URI 前置字串。例如:
在「Destination」(目的地) 部分,指定下列詳細資料:
- 在「Project」(專案),選取要建立資料表的專案。
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」(資料表) 中,輸入要建立的資料表名稱。
- 確認「資料表類型」已選取「外部資料表」。
- 在「Connection ID」(連線 ID) 部分,選取先前建立的連線。
在「Schema」(結構定義) 部分,您可以啟用結構定義自動偵測功能,也可以手動指定結構定義 (如有來源檔案)。如果沒有來源檔案,則必須手動指定結構定義。
如要啟用結構定義自動偵測功能,請選取「自動偵測」選項。
如要手動指定結構定義,請勿勾選「Auto-detect」(自動偵測) 選項。啟用「Edit as text」(以文字形式編輯),並以 JSON 陣列形式輸入資料表結構定義。
如要忽略含有與結構定義不符的多餘資料欄值的資料列,請展開「Advanced options」(進階選項) 區段,然後選取「Unknown values」(不明值)。
點選「建立資料表」。
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:要建立資料表的專案名稱,例如myprojectDATASET:要建立資料表的 BigQuery 資料集名稱,例如mydatasetEXTERNAL_TABLE_NAME:要建立的資料表名稱,例如mytablePARTITION_COLUMN:分區資料欄的名稱PARTITION_COLUMN_TYPE:分區資料欄的類型REGION:連線所在的區域,例如usCONNECTION_ID:連線名稱,例如myconnectionHIVE_PARTITION_URI_PREFIX:Hive 分區 URI 前置字串,例如:s3://mybucket/azure://mystorageaccount.blob.core.windows.net/mycontainer/
FILE_PATH:要建立的外部資料表資料來源路徑,例如:s3://mybucket/*.parquetazure://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:連線名稱,例如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
以下範例使用 CUSTOM Hive 分區模式處理 Blob 儲存體資料:
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 分區,請在建立資料表定義檔案時,將 hivePartitioningOptions 物件納入 ExternalDataConfiguration 物件。如要建立 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 中繼資料檔案更新結構定義。如要更新結構定義,請按照下列步驟操作:
使用
bq update指令,並加上--autodetect_schema旗標:bq update --autodetect_schema PROJECT_ID:DATASET.TABLE
更改下列內容:
PROJECT_ID:專案 ID,包含您要更新的資料表DATASET:資料集,內含要更新的資料表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 資料表
下列範例使用 CREATE EXTERNAL
TABLE 陳述式和 Delta Lake 格式建立外部資料表:
CREATE [OR REPLACE] EXTERNAL TABLE table_name
WITH CONNECTION connection_name
OPTIONS (
format = 'DELTA_LAKE',
uris = ["parent_directory"]
);
更改下列內容:
使用 Delta Lake 執行 BigQuery Omni 移轉作業
以下範例使用 LOAD DATA 陳述式,將資料載入適當的資料表:
LOAD DATA [INTO | OVERWRITE] table_name
FROM FILES (
format = 'DELTA_LAKE',
uris = ["parent_directory"]
)
WITH CONNECTION connection_name;
如要查看更多 BigQuery Omni 資料移轉範例,請參閱「使用 BigQuery Omni 作業載入資料」。
查詢 BigLake 資料表
詳情請參閱「查詢 Blob 儲存體資料」。
使用 INFORMATION_SCHEMA 查看資源中繼資料
您可以使用 INFORMATION_SCHEMA 檢視畫面查看資源中繼資料。查詢 JOBS_BY_*、JOBS_TIMELINE_BY_* 和 RESERVATION* 檢視表時,您必須指定查詢的處理位置,該位置必須與資料表區域相同。如要瞭解 BigQuery Omni 位置,請參閱「位置」。至於其他系統資料表,則不一定要指定查詢工作位置。
如要瞭解 BigQuery Omni 支援的系統資料表,請參閱「限制」。
如要查詢 JOBS_* 和 RESERVATION* 系統資料表,請選取下列其中一種方法來指定處理位置:
控制台
前往「BigQuery」頁面。
如果找不到「Editor」(編輯器) 分頁,請按一下 「Compose new query」(編寫新查詢)。
依序點選「編輯」>「查詢設定」。系統隨即會開啟「查詢設定」對話方塊。
在「Query settings」(查詢設定) 對話方塊中,依序點選「Additional settings」(其他設定) >「Data location」(資料位置),然後選取與 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 perimeter 限制從 BigQuery Omni 到外部雲端服務的存取權,做為額外的防禦層。舉例來說,VPC Service Controls 範圍可限制從 BigQuery Omni 資料表匯出至特定 Amazon S3 bucket 或 Blob 儲存體容器。
如要進一步瞭解 VPC Service Controls,請參閱「VPC Service Controls 總覽」。
必要權限
確認您具備設定 service perimeter 的必要權限。如要查看設定 VPC Service Controls 所需的 IAM 角色清單,請參閱 VPC Service Controls 說明文件中的「使用 IAM 控管存取權」。
使用 Google Cloud 控制台設定 VPC Service Controls
在 Google Cloud 控制台導覽選單中,依序按一下「Security」(安全性) 和「VPC Service Controls」。
如要為 BigQuery Omni 設定 VPC Service Controls,請按照「建立 service perimeter」指南中的步驟操作,並在「Egress rules」(輸出規則) 窗格中執行下列步驟:
在「Egress rules」(輸出規則) 面板中,按一下「Add rule」(新增規則)。
在「From attributes of the API client」(API 用戶端的「來源」屬性) 部分,從「Identity」(身分) 清單中選取選項。
選取「外部資源的 TO 屬性」。
如要新增外部資源,請按一下「新增外部資源」。
在「Add external resource」(新增外部資源) 對話方塊中,在「External resource name」(外部資源名稱) 部分輸入有效的資源名稱。例如:
Amazon Simple Storage Service (Amazon S3):
s3://BUCKET_NAME將 BUCKET_NAME 替換為 Amazon S3 bucket 名稱。
Azure Blob 儲存體:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME將 CONTAINER NAME 替換為 Blob 儲存體容器名稱。
如需輸出規則屬性清單,請參閱「輸出規則參考資料」。
選取要允許外部資源使用的方法:
- 如要允許所有方法,請在「Methods」(方法) 清單中選取「All methods」(所有方法)。
- 如要允許特定方法,請選取「Selected method」(所選方法),按一下「Select methods」(選取方法),然後選取要在外部資源上允許的方法。
按一下「建立範圍」。
使用 gcloud CLI 設定 VPC Service Controls
如要使用 gcloud CLI 設定 VPC Service Controls,請按照下列步驟操作:
設定預設存取權政策
存取權政策是組織層級的容器,用於存放存取層級和 service perimeter。如要瞭解如何設定預設存取權政策或取得存取權政策名稱,請參閱「管理存取權政策」。
建立輸出政策輸入檔案
輸出規則區塊定義了從 perimeter 內部存取 perimeter 外部資源的權限。如果是外部資源,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:列出 perimeter 外指定專案中 Google Cloud 資源允許的服務作業。operations:列出可存取的服務和動作或方法,滿足from區塊條件的用戶端可供存取。serviceName:為 BigQuery Omni 設定bigquery.googleapis.com。methodSelectors:列出符合from條件的用戶端可存取的方法。如需可限制的服務方法和權限,請參閱「支援的服務方法限制」。method:有效的服務方法,或設為\"*\",允許所有serviceName方法。permission:有效的服務權限,例如\"*\"、externalResource.read或externalResource.write。如果作業需要這項權限,即可存取 perimeter 外部的資源。externalResources:列出 perimeter 內用戶端可存取的外部資源。將 EXTERNAL_RESOURCE_PATH 替換為有效的 Amazon S3 bucket (例如s3://bucket_name),或 Blob Storage 容器路徑 (例如azure://myaccount.blob.core.windows.net/container_name)。egressFrom:列出 perimeter 內指定專案中 Google Cloud資源允許的服務作業。identityType或identities:定義可存取 perimeter 外部指定資源的身分類型。將 IDENTITY_TYPE 替換為下列其中一個有效值:ANY_IDENTITY:允許所有身分。ANY_USER_ACCOUNT:允許所有使用者。ANY_SERVICE_ACCOUNT:允許所有服務帳戶
identities:列出可存取 perimeter 外部指定資源的服務帳戶。serviceAccount(選用):將 SERVICE_ACCOUNT 替換為可存取 perimeter 外部指定資源的服務帳戶。
範例
以下範例政策允許從 perimeter 內部,對 AWS 中的 s3://mybucket Amazon S3 位置執行輸出作業。
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - s3://mybucket - s3://mybucket2 egressFrom: identityType: ANY_IDENTITY
以下範例允許對 Blob 儲存體容器執行輸出作業:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
如要進一步瞭解輸出政策,請參閱「輸出規則參考資料」。
新增輸出政策
如要在建立新的 service perimeter 時新增輸出政策,請使用 gcloud access-context-manager perimeters create 指令。例如,下列指令會建立名為 omniPerimeter 的新 perimeter,其中包含專案編號為 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
如要將輸出政策新增至現有的 service perimeter,請使用 gcloud access-context-manager perimeters update 指令。舉例來說,下列指令會將 egress.yaml 檔案中定義的輸出政策,新增至名為 omniPerimeter 的現有 service perimeter:
gcloud access-context-manager perimeters update omniPerimeter --set-egress-policies=egress.yaml
驗證 perimeter
如要驗證 perimeter,請使用 gcloud access-context-manager perimeters describe 指令:
gcloud access-context-manager perimeters describe PERIMETER_NAME
將 PERIMETER_NAME 替換為 perimeter 名稱。
舉例來說,下列指令會說明 perimeter omniPerimeter:
gcloud access-context-manager perimeters describe omniPerimeter
詳情請參閱「管理 service perimeter」。
允許 BigQuery Omni 虛擬私有雲存取 Blob 儲存體
BigQuery 管理員可以建立網路規則,授予 BigQuery Omni 存取 Blob 儲存體資源的權限。這可確保只有獲得授權的 BigQuery Omni 虛擬私有雲能與 Blob 儲存體互動,進而提升資料安全性。
為 BigQuery Omni 虛擬私有雲套用網路規則
如要套用網路規則,請使用 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 儲存體 BigLake 資料表的完整限制清單,請參閱「限制」。
後續步驟
- 瞭解 BigQuery Omni。
- 瞭解 BigLake 資料表。
- 瞭解如何將查詢結果匯出至 Blob 儲存體。