建立 Amazon S3 BigLake 外部資料表
本文說明如何建立 Amazon Simple Storage Service (Amazon S3) BigLake 資料表。BigLake 資料表可讓您使用存取權委派,查詢 Amazon S3 中的資料。存取權委派功能可將 BigLake 資料表的存取權,與基礎資料儲存空間的存取權分離開來。
如要瞭解 BigQuery 和 Amazon S3 之間的資料流動方式,請參閱查詢資料時的資料流動。
事前準備
確認你已連線存取 Amazon S3 資料。
必要的角色
如要取得建立外部資料表所需的權限,請要求管理員授予您資料集的 BigQuery 管理員 (roles/bigquery.admin
) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色具備建立外部資料表所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要建立外部資料表,必須具備下列權限:
-
bigquery.tables.create
-
bigquery.connections.delegate
建立資料集
建立外部資料表前,您必須先在支援的區域中建立資料集。選取下列其中一個選項:主控台
前往「BigQuery」頁面
- 在「Explorer」窗格中,選取要建立資料集的專案。
- 展開 「View actions」(查看動作) 選項,然後按一下「Create dataset」(建立資料集)。
- 在「建立資料集」頁面中,指定下列詳細資料:
SQL
使用 CREATE SCHEMA
DDL 陳述式。
以下範例會在 aws-us-east-1
區域中建立資料集:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE SCHEMA mydataset OPTIONS ( location = 'aws-us-east-1');
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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
。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
根據未分區資料建立 BigLake 資料表
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案,然後選取資料集。
在「資料集資訊」部分中,按一下
「建立資料表」。在「Create table」(建立資料表) 頁面的「Source」(來源) 區段中,執行下列操作:
- 在「使用下列資料建立資料表」中,選取「Amazon S3」。
- 在「Select S3 path」(選取 S3 路徑) 中,以
s3://BUCKET_NAME/PATH
格式輸入指向 Amazon S3 資料的 URI。將BUCKET_NAME
替換為 Amazon S3 值區的名稱;值區的區域應與資料集的區域相同。請將PATH
改成您要寫入匯出檔案的路徑,當中可加入一個萬用字元*
。 - 在「File format」(檔案格式) 部分選取 Amazon S3 中的資料格式。支援的格式包括 AVRO、CSV、DELTA_LAKE、ICEBERG、JSONL、ORC 和 PARQUET。
在「目的地」部分,指定下列詳細資料:
- 在「Dataset」(資料集) 中選擇適當的資料集。
- 在「Table」(資料表) 欄位中,輸入資料表名稱。
- 確認「Table type」(資料表類型) 已設為 [External table] (外部資料表)。
- 在「Connection ID」(連線 ID) 專區中,從下拉式選單選擇適當的連線 ID。如需連線相關資訊,請參閱「連結至 Amazon S3」。
在「Schema」(結構定義) 區段中,您可以啟用結構定義自動偵測功能,也可以在有來源檔案時手動指定結構定義。如果沒有來源檔案,就必須手動指定結構定義。
如要啟用結構定義自動偵測功能,請選取「Auto-detect」(自動偵測) 選項。
如要手動指定結構定義,請取消勾選「自動偵測」選項。啟用「以文字形式編輯」,然後以 JSON 陣列的形式輸入資料表結構定義。
點選「建立資料表」。
SQL
如要建立 BigLake 資料表,請使用 CREATE EXTERNAL TABLE
陳述式和 WITH CONNECTION
子句:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME WITH CONNECTION `AWS_LOCATION.CONNECTION_NAME` OPTIONS ( format = "DATA_FORMAT", uris = ["S3_URI"], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
更改下列內容:
DATASET_NAME
:您建立的資料集名稱TABLE_NAME
:您要為這個資料表指定的名稱AWS_LOCATION
:AWS 位置(例如 `aws-us-east-1`) Google CloudCONNECTION_NAME
:您建立的連線名稱DATA_FORMAT
:任何支援的 BigQuery 聯合格式 (例如AVRO
、CSV
、DELTA_LAKE
、ICEBERG
或PARQUET
(預覽版))S3_URI
:指向 Amazon S3 資料的 URI (例如s3://bucket/path
)STALENESS_INTERVAL
:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入
INTERVAL 4 HOUR
。如果資料表在過去 4 小時內重新整理過,針對該資料表執行的作業就會使用快取中繼資料。如果快取中繼資料較舊,作業會改為從 Amazon S3 擷取中繼資料。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例:
CREATE EXTERNAL TABLE awsdataset.awstable WITH CONNECTION `aws-us-east-1.s3-read-connection` OPTIONS ( format="CSV", uris=["s3://s3-bucket/path/file.csv"], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
bq
建立資料表定義檔:
bq mkdef \ --source_format=DATA_FORMAT \ --connection_id=AWS_LOCATION.CONNECTION_NAME \ --metadata_cache_mode=CACHE_MODE \ S3_URI > table_def
更改下列內容:
DATA_FORMAT
:任何支援的 BigQuery 聯合格式 (例如AVRO
、CSV
、DELTA_LAKE
、ICEBERG
或PARQUET
)。S3_URI
:指向 Amazon S3 資料的 URI (例如s3://bucket/path
)。AWS_LOCATION
:AWS 位置(例如 Google Cloud )。aws-us-east-1
CONNECTION_NAME
:您建立的連線名稱。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。只有當您也打算在後續的bq mk
指令中使用--max_staleness
標記來啟用中繼資料快取時,才需要加入這個標記。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常介於 30 到 60 分鐘之間) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。
接著,建立 BigLake 資料表:
bq mk --max_staleness=STALENESS_INTERVAL --external_table_definition=table_def DATASET_NAME.TABLE_NAME
更改下列內容:
STALENESS_INTERVAL
:指定對 BigLake 表格執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入
INTERVAL 4 HOUR
。如果資料表在過去 4 小時內重新整理過,針對資料表執行的作業就會使用快取中繼資料。如果快取中繼資料的時間早於此時間,作業就會改為從 Amazon S3 擷取中繼資料。DATASET_NAME
:您建立的資料集名稱。TABLE_NAME
:您要為這個資料表指定的名稱。
舉例來說,下列指令會建立新的 BigLake 資料表 awsdataset.awstable
,該資料表可查詢儲存在路徑 s3://s3-bucket/path/file.csv
的 Amazon S3 資料,並在位置 aws-us-east-1
中建立讀取連線:
bq mkdef \ --autodetect \ --source_format=CSV \ --connection_id=aws-us-east-1.s3-read-connection \ --metadata_cache_mode=AUTOMATIC \ s3://s3-bucket/path/file.csv > table_def bq mk --max_staleness=INTERVAL "1" HOUR \ --external_table_definition=table_def awsdataset.awstable
API
呼叫 tables.insert
方法 API 方法,並在您傳入的 Table
資源中建立 ExternalDataConfiguration
。
指定 schema
屬性,或將 autodetect
屬性設為 true
,為支援的資料來源啟用結構定義自動偵測功能。
指定 connectionId
屬性,找出要用於連線至 Amazon S3 的連線。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
根據分區資料建立 BigLake 資料表
您可以為 Amazon S3 中的 Hive 分區資料建立 BigLake 資料表。建立外部分區資料表後,您就無法變更分區鍵。如要變更分割區鍵,您必須重新建立資料表。
如要根據 Hive 分區資料建立 BigLake 資料表,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案並選取資料集。
按一下「查看動作」
,然後按一下「建立資料表」。系統會開啟「建立資料表」窗格。在「來源」部分,指定下列詳細資料:
在「使用下列資料建立資料表」中,選取「Amazon S3」。
使用萬用字元提供資料夾路徑。例如:
s3://mybucket/*
。資料夾的位置必須與要建立、附加或覆寫的資料表所在的資料集位置相同。
從「檔案格式」清單中選取檔案類型。
選取「來源資料分割」核取方塊,然後指定下列詳細資料:
- 在「選取來源 URI 前置字串」中,輸入 URI 前置字串。例如:
s3://mybucket/my_files
。 - 選用:如要對這個資料表的所有查詢強制使用分區篩選器,請選取「需要分區篩選器」核取方塊。 使用分區篩選器可以降低成本並提升效能。詳情請參閱在查詢中對分區鍵套用述詞篩選器。
在「分割區推論模式」部分,選取下列其中一個選項:
- 自動推論類型:將分區結構定義偵測模式設為
AUTO
。 - 將所有資料欄視為字串:將分區結構定義偵測模式設為
STRINGS
。 - 提供自己的結構定義:將分區結構定義偵測模式設為
CUSTOM
,然後手動輸入分區鍵的結構定義資訊。詳情請參閱「自訂分區索引鍵結構定義」。
- 自動推論類型:將分區結構定義偵測模式設為
- 在「選取來源 URI 前置字串」中,輸入 URI 前置字串。例如:
在「目的地」部分,指定下列詳細資料:
- 在「Project」(專案) 部分,選取要在其中建立資料表的專案。
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」(資料表) 中,輸入要建立的資料表名稱。
- 確認「Table type」(資料表類型) 已選取「External table」(外部資料表)。
- 在「連線 ID」部分,選取您先前建立的連線。
在「Schema」(結構定義) 區段中,您可以啟用結構定義自動偵測功能,也可以在有來源檔案時手動指定結構定義。如果沒有來源檔案,就必須手動指定結構定義。
如要啟用結構定義自動偵測功能,請選取「Auto-detect」(自動偵測) 選項。
如要手動指定結構定義,請取消勾選「自動偵測」選項。啟用「以文字形式編輯」,然後以 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" max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
取代下列項目:
PROJECT_ID
:要在其中建立資料表的專案名稱,例如myproject
DATASET
:您要在其中建立資料表的 BigQuery 資料集名稱,例如mydataset
EXTERNAL_TABLE_NAME
:要建立的資料表名稱,例如mytable
PARTITION_COLUMN
:分區資料欄的名稱PARTITION_COLUMN_TYPE
:分區欄的類型REGION
:包含連線的區域,例如us
CONNECTION_ID
:連線名稱,例如myconnection
HIVE_PARTITION_URI_PREFIX
:Hive 分區 URI 前置字元,例如:s3://mybucket/
FILE_PATH
:要建立的外部資料表資料來源路徑,例如:s3://mybucket/*.parquet
TABLE_FORMAT
:要建立的資料表格式,例如PARQUET
STALENESS_INTERVAL
:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入
INTERVAL 4 HOUR
。如果資料表在過去 4 小時內重新整理過,針對該資料表執行的作業就會使用快取中繼資料。如果快取中繼資料較舊,作業會改為從 Amazon S3 擷取中繼資料。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例
下列範例會在 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/*'] max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
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 \ --metadata_cache_mode=CACHE_MODE \ URIS > DEFINITION_FILE
更改下列內容:
SOURCE_FORMAT
:外部資料來源的格式。例如:CSV
。REGION
:包含連線的區域,例如us
。CONNECTION_ID
:連線名稱,例如myconnection
。PARTITIONING_MODE
:Hive 分區模式。請使用下列其中一個值:AUTO
:自動偵測索引鍵名稱和類型。STRINGS
:自動將鍵名轉換為字串。CUSTOM
:在來源 URI 前置字串中編碼索引鍵結構定義。
URI_SHARED_PREFIX
:來源 URI 前置字串。BOOLEAN
:指定是否要在查詢時要求述詞篩選器。這個標記是選用的,預設值為false
。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。只有當您也打算在後續的bq mk
指令中使用--max_staleness
標記來啟用中繼資料快取時,才需要加入這個標記。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常介於 30 到 60 分鐘之間) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。URIS
:Amazon S3 資料夾的路徑,使用萬用字元格式。DEFINITION_FILE
:本機電腦上資料表定義檔的路徑。
如果 PARTITIONING_MODE
為 CUSTOM
,請在來源 URI 前置字串中加入分區索引鍵結構定義,格式如下:
--hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
建立資料表定義檔後,請使用 bq mk
指令建立 BigLake 資料表:
bq mk --max_staleness=STALENESS_INTERVAL \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
更改下列內容:
STALENESS_INTERVAL
:指定對 BigLake 表格執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入
INTERVAL 4 HOUR
。如果資料表在過去 4 小時內重新整理過,針對資料表執行的作業就會使用快取中繼資料。如果快取中繼資料的時間早於此時間,作業就會改為從 Amazon S3 擷取中繼資料。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 --max_staleness=INTERVAL "1" HOUR \
--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 \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/myTable/* > mytable_def
bq mk --max_staleness=INTERVAL "1" HOUR \
--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 中繼資料檔案更新結構定義。如要更新結構定義,請按照下列步驟操作:
使用加上
--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 中繼資料檔案更新資料表。您必須使用自動偵測結構定義資料表更新作業。詳情請參閱「結構定義同步」。
只有透過 BigQuery 服務存取 Delta Lake 資料表時,BigLake 安全性功能才會提供保護。
建立 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"] );
更改下列內容:
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 資料表
詳情請參閱「查詢 Amazon S3 資料」。
查看資源中繼資料
您可以使用INFORMATION_SCHEMA
檢視表查看資源中繼資料。查詢 JOBS_BY_*
、JOBS_TIMELINE_BY_*
和 RESERVATION*
檢視區塊時,必須指定與資料表所在區域位於同一位置的查詢處理位置。如要瞭解 BigQuery Omni 位置,請參閱「位置」。對於所有其他系統資料表,指定查詢工作位置是選用做法。
如要瞭解 BigQuery Omni 支援的系統資料表,請參閱限制。
如要查詢 JOBS_*
和 RESERVATION*
系統資料表,請選取下列其中一種方法來指定處理位置:
主控台
前往「BigQuery」頁面
如果沒有看到「Editor」(編輯器) 分頁,請按一下
「Compose new query」(編寫新查詢)。依序點選「更多」>「查詢設定」。「查詢設定」對話方塊隨即開啟。
在「查詢設定」對話方塊中,依序選取「其他設定」>「資料位置」,然後選取與 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-aws-us-east-1.INFORMATION_SCHEMA.JOBS limit 10;"
bq query --use_legacy_sql=false --location=asia-northeast3 \
"SELECT * FROM region-aws-ap-northeast-2.INFORMATION_SCHEMA.JOBS limit 10;"
API
如果您是透過程式執行工作,請將位置引數設為與 BigQuery Omni 區域共置的 BigQuery 區域。舉例來說,如果 BigQuery Omni 區域是 aws-us-east-1
,請指定 us-east4
。
以下範例會列出過去六小時內的中繼資料重新整理工作:
SELECT * FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time desc LIMIT 10;
將 REGION_NAME 替換成您的區域。
VPC Service Controls
您可以透過 VPC Service Controls 服務範圍,限制 BigQuery Omni 對外部雲端服務的存取權,進一步防禦。舉例來說,VPC Service Controls 範圍可限制從 BigQuery Omni 資料表匯出資料,只能匯出至特定 Amazon S3 值區或 Blob 儲存體容器。
如要進一步瞭解 VPC Service Controls,請參閱「VPC Service Controls 總覽」。
必要權限
請確認您具備設定服務範圍的必要權限。 如要查看設定 VPC Service Controls 時須具備的 IAM 角色清單,請參閱 VPC Service Controls 說明文件中的「使用 IAM 控管存取權」。
使用 Google Cloud 控制台設定 VPC Service Controls
在 Google Cloud 控制台導覽選單中,按一下「Security」(安全性),然後按一下「VPC Service Controls」(虛擬私有雲服務控制項)。
如要為 BigQuery Omni 設定 VPC Service Controls,請按照「建立服務範圍」指南中的步驟操作,並在「Egress rules」(輸出規則) 窗格中執行下列步驟:
在「Egress rules」(輸出規則) 面板中,按一下「Add rule」(新增規則)。
在「From attributes of the API client」(來自 API 用戶端的屬性) 部分,從「Identity」(身分) 清單中選取選項。
選取「外部資源的 TO 屬性」。
如要新增外部資源,請按一下「新增外部資源」。
在「新增外部資源」對話方塊中,為「外部資源名稱」輸入有效的資源名稱。例如:
Amazon Simple Storage Service (Amazon S3):
s3://BUCKET_NAME
將 BUCKET_NAME 替換為 Amazon S3 值區名稱。
Azure Blob 儲存體:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME
將 CONTAINER NAME 替換為 Blob 儲存體容器名稱。
如需輸出規則屬性清單,請參閱輸出規則參考資料。
選取要在外部資源上允許的方法:
- 如要允許所有方法,請在「方法」清單中選取「所有方法」。
- 如要允許特定方法,請選取「選取的方法」,按一下「選取方法」,然後選取要在外部資源上允許的方法。
按一下「建立範圍」。
使用 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 Cloudoperations
:列出符合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 儲存體容器路徑 (例如azure://myaccount.blob.core.windows.net/container_name
)。egressFrom
:列出範圍內指定專案中資源允許的服務作業。 Google CloudidentityType
或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 儲存體容器執行輸出作業:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
如要進一步瞭解輸出政策,請參閱輸出規則參考資料。
新增 Egress 政策
如要在建立新服務範圍時新增輸出政策,請使用 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 存取 Amazon S3
BigQuery 管理員可以建立 S3 bucket 政策,授予 BigQuery Omni 存取 Amazon S3 資源的權限。確保只有授權的 BigQuery Omni VPC 才能與 Amazon S3 互動,進一步提升資料安全性。
為 BigQuery Omni VPC 套用 S3 儲存空間政策
如要套用 S3 值區政策,請使用 AWS CLI 或 Terraform:
AWS CLI
執行下列指令,套用包含使用 aws:SourceVpc
屬性條件的 S3 值區政策:
aws s3api put-bucket-policy \ --bucket=BUCKET_NAME \ --policy "{ \"Version\": \"2012-10-17\", \"Id\": \"RestrictBucketReads\", \"Statement\": [ { \"Sid\": \"AccessOnlyToOmniVPC\", \"Principal\": \"*\", \"Action\": [\"s3:ListBucket\", \"s3:GetObject\"], \"Effect\": \"Allow\", \"Resource\": [\"arn:aws:s3:::BUCKET_NAME\", \"arn:aws:s3:::BUCKET_NAME/*\"], \"Condition\": { \"StringEquals\": { \"aws:SourceVpc\": \"VPC_ID\" } } } ] }"
更改下列內容:
BUCKET_NAME
:您希望 BigQuery 存取的 Amazon S3 儲存空間。- :與 Amazon S3 儲存空間值區共置的 BigQuery Omni 區域 BigQuery Omni VPC ID。
VPC_ID
您可以在本頁的表格中找到這項資訊。
Terraform
在 Terraform 設定檔中新增下列內容:
resource "aws_s3_bucket" "example" { bucket = "BUCKET_NAME" } resource "aws_s3_bucket_policy" "example" { bucket = aws_s3_bucket.example.id policy = jsonencode({ Version = "2012-10-17" Id = "RestrictBucketReads" Statement = [ { Sid = "AccessOnlyToOmniVPC" Effect = "Allow" Principal = "*" Action = ["s3:GetObject", "s3:ListBucket"] Resource = [ aws_s3_bucket.example.arn, "${aws_s3_bucket.example.arn}/*" ] Condition = { StringEquals = { "aws:SourceVpc": "VPC_ID" } } }, ] }) }
更改下列內容:
BUCKET_NAME
:您希望 BigQuery 存取的 Amazon S3 儲存空間。- :與 Amazon S3 儲存空間值區共置的 BigQuery Omni 區域 BigQuery Omni VPC ID。
VPC_ID
BigQuery Omni VPC 資源 ID
區域 | 虛擬私有雲 ID |
---|---|
aws-ap-northeast-2 | vpc-0b488548024288af2 |
aws-ap-southeast-2 | vpc-0726e08afef3667ca |
aws-eu-central-1 | vpc-05c7bba12ad45558f |
aws-eu-west-1 | vpc-0e5c646979bbe73a0 |
aws-us-east-1 | vpc-0bf63a2e71287dace |
aws-us-west-2 | vpc-0cc24e567b9d2c1cb |
限制
如要查看適用於 Amazon S3 和 Blob 儲存空間 BigLake 資料表的完整限制清單,請參閱「限制」。
後續步驟
- 瞭解 BigQuery Omni。
- 使用 BigQuery Omni with AWS 實驗室。
- 瞭解 BigLake 資料表。
- 瞭解如何將查詢結果匯出至 Amazon S3。
- 瞭解如何在啟用 Amazon Simple Storage Service (Amazon S3) 中繼資料快取功能的資料表上建立具體化檢視表。
- 瞭解如何建立 materialized view 的副本,在本地提供 materialized view 中的 Amazon S3 資料,以供聯結。