建立物件資料表
本文說明如何建立物件資料表,讓 BigQuery 存取 Cloud Storage 中的非結構化資料。
如要建立物件表格,請完成下列工作:
- 建立包含物件資料表的資料集。
- 建立「連線」,從 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 如要建立資料集和資料表,您必須具備 BigQuery 資料編輯者 (
roles/bigquery.dataEditor) 角色。 - 如要建立連線,您必須具備 BigQuery 連線管理員 (
roles/bigquery.connectionAdmin) 角色。 - 如要將角色授予連線的服務帳戶,您必須具備專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) 角色。 - BigQuery 資料檢視者 (
roles/bigquery.dataViewer) 角色 - BigQuery Connection 使用者 (
roles/bigquery.connectionUser) 角色 bigquery.datasets.createbigquery.tables.createbigquery.tables.updatebigquery.connections.createbigquery.connections.getbigquery.connections.listbigquery.connections.updatebigquery.connections.usebigquery.connections.deletebigquery.connections.delegatestorage.bucket.*storage.object.*bigquery.jobs.createbigquery.tables.getbigquery.tables.getDatabigquery.readsessions.create前往 Google Cloud 控制台的「BigQuery」頁面。
點選左側窗格中的 「Explorer」:

如果沒有看到左側窗格,請按一下「展開左側窗格」圖示 開啟窗格。
在「Explorer」窗格中,按一下專案名稱。
依序點按 「View actions」(查看動作) >「Create dataset」(建立資料集)。
在「建立資料集」頁面中,執行下列操作:
在「Dataset ID」(資料集 ID) 部分,輸入資料集的名稱。
在「位置類型」部分,選取「區域」或「多區域」。
- 如果選取「區域」,請從「區域」清單中選取位置。
- 如果選取「多區域」,請從「多區域」清單中選取「美國」或「歐洲」。
點選「建立資料集」。
前往「BigQuery」頁面
點選左側窗格中的 「Explorer」:

在「Explorer」窗格中,按一下「新增資料」。
「新增資料」對話方塊隨即開啟。
在「Filter By」(篩選依據) 窗格的「Data Source Type」(資料來源類型) 區段中,選取「Business Applications」(商用應用程式)。
或者,您也可以在「Search for data sources」(搜尋資料來源) 欄位中輸入
Vertex AI。在「精選資料來源」部分,點選「Vertex AI」。
按一下「Vertex AI Models: BigQuery Federation」解決方案資訊卡。
在「連線類型」清單中,選取「Vertex AI 遠端模型、遠端函式、BigLake 和 Spanner (Cloud 資源)」。
在「連線 ID」欄位中,輸入連線名稱。
在「位置類型」部分,選取「區域」或「多區域」。
- 如果選取「區域」,請從「區域」清單中選取位置。
- 如果選取「多區域」,請從「多區域」清單中選取「美國」或「歐洲」。
點選「建立連線」。
點選「前往連線」。
在「連線資訊」窗格中,複製服務帳戶 ID,以供後續步驟使用。
前往「IAM & Admin」(IAM 與管理) 頁面。
按一下「新增」。
「新增主體」對話方塊隨即開啟。
在「新增主體」欄位,輸入先前複製的服務帳戶 ID。
在「Select a role」(請選擇角色) 欄位中,依序選取「Cloud Storage」和「Storage Object Viewer」(Storage 物件檢視者)。
按一下 [儲存]。
PROJECT_NUMBER:要授予角色的專案專案編號。MEMBER:您先前複製的服務帳戶 ID。前往 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:要與這個物件資料表搭配使用的雲端資源連線 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:要用於這個外部資料表的雲端資源連線 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 已建立或更新這些資源。
- 瞭解如何對圖片物件資料表執行推論。
- 瞭解如何使用遠端函式分析物件資料表。
必要的角色
如要建立物件表格,您必須擁有專案的下列角色:
如要查詢物件資料表,您必須具備專案的下列角色:
如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
建立資料集
建立 BigQuery 資料集,內含物件資料表:
建立連線
如果您已設定預設連線,或具備 BigQuery 管理員角色,可以略過這個步驟。
為物件資料表建立要使用的Cloud 資源連線,並取得連線的服務帳戶。
授予服務帳戶存取權
為連線的服務帳戶授予 Storage 物件檢視者角色:
控制台
gcloud
使用 gcloud projects add-iam-policy-binding 指令。
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None
取代下列項目:
建立物件資料表
如要建立物件資料表,請按照下列步驟操作:
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;
查詢物件資料表會傳回基礎物件的中繼資料。詳情請參閱物件資料表結構定義。