建立物件資料表
本文說明如何建立物件資料表,在 BigQuery 中存取非結構化資料。
如要建立物件表格,請完成下列工作:
- 建立「連線」,從 Cloud Storage 讀取物件資訊。
- 將 Storage 物件檢視者 (
roles/storage.objectViewer
) 角色授予與連線相關聯的服務帳戶。 - 使用
CREATE EXTERNAL TABLE
陳述式建立物件資料表,並將其與連線建立關聯。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
- 確認 BigQuery 管理員已建立連線,並設定 Cloud Storage 的存取權。
資料湖泊管理員
如要取得連結至 Cloud Storage 所需的權限,請要求管理員授予專案的 BigQuery 連線管理員 (
roles/bigquery.connectionAdmin
) 角色。如要取得建立及管理 Cloud Storage 值區所需的權限,請要求管理員授予您專案的「儲存空間管理員」角色 (
roles/storage.admin
)。這個預先定義的角色具備連線至 Cloud Storage,以及建立和管理 Cloud Storage 值區所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
storage.bucket.*
storage.object.*
資料倉儲管理員
如要取得建立物件資料表所需的權限,請要求管理員在專案中授予您下列角色:
- BigQuery 資料編輯者 (
roles/bigquery.dataEditor
) 角色。 - BigQuery 連線管理員 (
roles/bigquery.connectionAdmin
) 角色。
這個預先定義的角色具備建立物件資料表所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
- BigQuery 資料編輯者 (
資料分析人員
如要取得查詢物件資料表所需的權限,請要求管理員在專案中授予您下列角色:
- BigQuery 資料檢視者 (
roles/bigquery.dataViewer
) 角色 - BigQuery Connection 使用者 (
roles/bigquery.connectionUser
) 角色
這個預先定義的角色具備查詢物件資料表所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
bigquery.jobs.create
bigquery.tables.get
bigquery.tables.getData
bigquery.readsessions.create
- BigQuery 資料檢視者 (
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID`| DEFAULT} OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
取代下列項目:
PROJECT_ID
:您的專案 ID。DATASET_ID
:包含物件資料表的資料集 ID。TABLE_NAME
:物件表格的名稱。REGION
:包含連線的區域或多區域。CONNECTION_ID
:要用於這個物件資料表的Cloud 資源連線 ID。連線會決定用來從 Cloud Storage 讀取資料的服務帳戶。在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個部分的值,例如
projects/myproject/locations/connection_location/connections/myconnection
。如要使用 預設連線,請指定
DEFAULT
,而不是包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。BUCKET_PATH
:Cloud Storage bucket 的路徑,其中包含物件表格代表的物件,格式為['gs://bucket_name/[folder_name/]*']
。您可以在每個路徑中使用一個星號 (
*
) 萬用字元,限制物件表格中包含的物件。舉例來說,如果 bucket 包含多種非結構化資料,您可以指定['gs://bucket_name/*.pdf']
,只針對 PDF 物件建立物件資料表。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區,例如['gs://mybucket1/*', 'gs://mybucket2/folder5/*']
。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
STALENESS_INTERVAL
:指定對物件資料表執行的作業是否使用快取中繼資料,以及作業必須使用多新的快取中繼資料。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入
INTERVAL 4 HOUR
。如果資料表在過去 4 小時內重新整理過,針對該資料表執行的作業就會使用快取中繼資料。如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。
按一下「執行」
。PROJECT_ID
:您的專案 ID。DATASET_ID
:包含物件資料表的資料集 ID。TABLE_NAME
:物件表格的名稱。REGION
:包含連線的區域或多區域。CONNECTION_ID
:要用於這個外部資料表的Cloud 資源連線 ID。連線會決定用來從 Cloud Storage 讀取資料的服務帳戶。在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個區段的值,例如
projects/myproject/locations/connection_location/connections/myconnection
。BUCKET_PATH
:Cloud Storage bucket 的路徑,其中包含物件表格代表的物件,格式為gs://bucket_name/[folder_name/]*
。您可以在每個路徑中使用一個星號 (
*
) 萬用字元,限制物件表格中包含的物件。舉例來說,如果 bucket 包含多種非結構化資料,您可以指定gs://bucket_name/*.pdf
,只針對 PDF 物件建立物件資料表。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區,例如gs://mybucket1/*,gs://mybucket2/folder5/*
。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
STALENESS_INTERVAL
:指定對物件資料表執行的作業是否使用快取中繼資料,以及作業必須使用多新的快取中繼資料。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取,請使用
INTERVAL
資料類型文件所述的Y-M D H:M:S
格式,指定 30 分鐘到 7 天之間的時間間隔值。舉例來說,如要指定 4 小時的過時間隔,請輸入0-0 0 4:0:0
。如果資料表在過去 4 小時內重新整理過,針對資料表執行的作業就會使用快取中繼資料。如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。設為
AUTOMATIC
,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。如要依您決定的時間表重新整理中繼資料快取,請設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您就必須設定CACHE_MODE
。- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是
.tf
,例如main.tf
。在本教學課程中,這個檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。
將範例程式碼複製到新建立的
main.tf
。視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。
- 查看並修改範例參數,套用至您的環境。
- 儲存變更。
-
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade
選項:terraform init -upgrade
-
檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
- 瞭解如何對圖片物件資料表執行推論。
- 瞭解如何使用遠端函式分析物件資料表。
必要的角色
如要使用物件表格,使用者必須根據在機構中的角色,具備下列 IAM 權限。如要進一步瞭解使用者角色,請參閱「安全性模型」。如要進一步瞭解如何授予權限,請參閱查看可針對資源授予的角色。
建立物件資料表
建立物件資料表前,您必須先建立現有資料集來存放該資料表。詳情請參閱「建立資料集」。
如要建立物件資料表,請按照下列步驟操作:
SQL
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例
下列範例會建立物件資料表,並將中繼資料快取過時間隔設為 1 天:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://mybucket/*'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
下列範例會針對三個 Cloud Storage 值區中的物件建立物件資料表:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*','gs://bucket2/folder1/*','gs://bucket3/*'] );
下列範例會針對 Cloud Storage bucket 中的 PDF 物件建立物件資料表:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*.pdf'] );
bq
使用 bq mk
指令。
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
取代下列項目:
範例
下列範例會建立物件資料表,並將中繼資料快取過時間隔設為 1 天:
bq mk --table \ --external_table_definition=gs://mybucket/*@us.my-connection \ --object_metadata=SIMPLE \ --max_staleness=0-0 1 0:0:0 \ --metadata_cache_mode=AUTOMATIC \ my_dataset.object_table
下列範例會針對三個 Cloud Storage 值區中的物件建立物件資料表:
bq mk --table \ --external_table_definition=gs://bucket1/*,gs://bucket2/folder1/*,gs://bucket3/*@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
下列範例會針對 Cloud Storage bucket 中的 PDF 物件建立物件資料表:
bq mk --table \ --external_table_definition=gs://bucket1/*.pdf@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
API
呼叫 tables.insert
方法。在您傳入的 Table
資源中,納入 ExternalDataConfiguration
物件,並將 objectMetadata
欄位設為 SIMPLE
。
以下範例說明如何使用 curl
呼叫這個方法:
ACCESS_TOKEN=$(gcloud auth print-access-token) curl \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST \
-d '{"tableReference": {"projectId": "my_project", "datasetId": "my_dataset", "tableId": "object_table_name"}, "externalDataConfiguration": {"objectMetadata": "SIMPLE", "sourceUris": ["gs://mybucket/*"]}}' \
https://www.googleapis.com/bigquery/v2/projects/my_project/datasets/my_dataset/tables
Terraform
這個範例會建立物件資料表,並啟用中繼資料快取功能,但採用手動重新整理。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
為物件資料表指定的索引鍵欄位為 google_bigquery_table.external_data_configuration.object_metadata
、google_bigquery_table.external_data_configuration.metadata_cache_mode
和 google_bigquery_table.max_staleness
。如要進一步瞭解各項資源,請參閱 Terraform BigQuery 說明文件。
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
套用變更
查詢物件資料表
您可以像查詢任何其他 BigQuery 資料表一樣查詢物件資料表,例如:
SELECT * FROM mydataset.myobjecttable;
查詢物件資料表會傳回基礎物件的中繼資料。詳情請參閱物件資料表結構定義。