建立 Cloud Storage 外部資料表
BigQuery 可以查詢下列格式的 Cloud Storage 資料:
- 逗號分隔值 (CSV)
- JSON (以換行符號分隔)
- Avro
- ORC
- Parquet
- Datastore 匯出檔案
- Firestore 匯出
BigQuery 支援在下列儲存空間級別查詢 Cloud Storage 資料:
- 標準
- Nearline
- Coldline
- 封存
如要查詢 Cloud Storage 外部資料表,您必須具備外部資料表和 Cloud Storage 檔案的權限。建議您盡可能改用 BigLake 資料表。BigLake 資料表提供存取權委派功能,因此您只需要 BigLake 資料表的權限,就能查詢 Cloud Storage 資料。
查詢儲存在 Cloud Storage 中的資料時,請務必考慮資料集和 Cloud Storage 值區的位置。
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文件中各項工作的必要權限。執行工作所需的權限 (如有) 會列在工作內容的「必要權限」部分。
必要的角色
如要建立外部資料表,您必須具備 bigquery.tables.create
BigQuery 身分與存取權管理 (IAM) 權限。
以下每個預先定義的 Identity and Access Management 角色都包含這項權限:
- BigQuery 資料編輯器 (
roles/bigquery.dataEditor
) - BigQuery 資料擁有者 (
roles/bigquery.dataOwner
) - BigQuery 管理員 (
roles/bigquery.admin
)
您也需要下列權限,才能存取包含資料的 Cloud Storage 值區:
storage.buckets.get
storage.objects.get
storage.objects.list
(如果您使用 URI 萬用字元,則為必要參數)
Cloud Storage Storage Admin (roles/storage.admin
) 預先定義的 Identity and Access Management 角色包含這些權限。
如果您不是上述任一角色的實體,請要求管理員授予存取權,或為您建立外部資料表。
如要進一步瞭解 BigQuery 中的 Identity and Access Management 角色和權限,請參閱「預先定義的角色和權限」一文。
Compute Engine 執行個體的存取範圍
如果您需要從 Compute Engine 執行個體查詢連結至 Cloud Storage 來源的外部資料表,則該執行個體至少必須具備 Cloud Storage 唯讀存取範圍 (https://www.googleapis.com/auth/devstorage.read_only
)。
這些範圍會控管 Compute Engine 執行個體對 Google Cloud產品 (包括 Cloud Storage) 的存取權。在執行個體上執行的應用程式會使用連接執行個體的服務帳戶呼叫 Google Cloud API。
如果您將 Compute Engine 執行個體設為以預設的 Compute Engine 服務帳戶執行,則系統會預設授予執行個體多個預設範圍,包括 https://www.googleapis.com/auth/devstorage.read_only
範圍。
如果您改為使用自訂服務帳戶設定執行個體,請務必明確授予 https://www.googleapis.com/auth/devstorage.read_only
範圍給執行個體。
如要瞭解如何為 Compute Engine 執行個體套用範圍,請參閱「變更執行個體的服務帳戶與存取範圍」一文。如要進一步瞭解 Compute Engine 服務帳戶,請參閱「服務帳戶」一文。
在未分區的資料上建立外部資料表
您可以透過下列方式建立已連結至外部資料來源的永久資料表:
- 使用 Google Cloud 主控台
- 使用
bq mk
指令 - 在使用
tables.insert
API 方法時建立ExternalDataConfiguration
- 執行
CREATE EXTERNAL TABLE
資料定義語言 (DDL) 陳述式。 - 使用用戶端程式庫
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案並選取資料集。
展開
「動作」選項,然後按一下「建立資料表」。在「Source」部分中,指定下列詳細資料:
在「Create table from」(使用下列資料建立資料表) 區段,選取「Google Cloud Storage」
如要從 GCS 值區選取檔案或使用 URI 模式,請瀏覽並選取要使用的值區和檔案,或輸入
gs://bucket_name/[folder_name/]file_name
格式的路徑。您無法在 Google Cloud 控制台中指定多個 URI,但可以指定一個星號 (
*
) 萬用字元來選取多個檔案。例如gs://mybucket/file_name*
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。Cloud Storage 值區的位置必須和要建立的資料表所在的資料集位置相同。
在「File format」(檔案格式) 部分,選取與檔案相符的格式。
在「Destination」部分中,指定下列詳細資料:
在「Project」(專案) 部分,選擇要建立資料表的專案。
在「Dataset」(資料集) 部分,選擇要建立資料表的資料集。
在「Table」(資料表) 中,輸入要建立的資料表名稱。
在「Table type」(資料表類型) 中,選取「External table」(外部資料表)。
在「Schema」區段中,您可以啟用結構定義自動偵測功能,或手動指定結構定義 (如果有來源檔案)。如果沒有來源檔案,您必須手動指定結構定義。
如要啟用結構定義自動偵測功能,請選取「Auto-detect」(自動偵測) 選項。
如要手動指定結構定義,請不要勾選「Auto-detect」選項。啟用「Edit as text」,然後以 JSON 陣列的形式輸入資料表結構定義。
如要忽略含有與結構定義不符的額外資料欄值的資料列,請展開「進階選項」部分,然後選取「不明的值」。
點選「建立資料表」。
建立永久資料表後,您就可以把這個資料表當做原生 BigQuery 資料表一樣執行查詢。查詢完成後,可以將結果匯出為 CSV 或 JSON 檔案、將結果儲存為資料表,或將結果儲存至 Google 試算表。
SQL
您可以執行 CREATE EXTERNAL TABLE
DDL 陳述式,建立永久外部資料表。您可以明確指定結構定義,也可以使用結構定義自動偵測功能,從外部資料推斷結構定義。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` OPTIONS ( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'[,...]] );
請依指示取代下列項目:
PROJECT_ID
:您要建立資料表的專案名稱,例如myproject
DATASET
:您要建立資料表的 BigQuery 資料集名稱,例如mydataset
EXTERNAL_TABLE_NAME
:您要建立的資料表名稱,例如mytable
TABLE_FORMAT
:您要建立的資料表格式,例如PARQUET
BUCKET_PATH
:包含外部資料表資料的 Cloud Storage 值區路徑,格式為['gs://bucket_name/[folder_name/]file_name']
。您可以在路徑中指定一個星號 (
*
) 萬用字元,從值區中選取多個檔案。例如,['gs://mybucket/file_name*']
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區。以下範例顯示有效的
uris
值:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
指定目標為多個檔案的
uris
值時,所有檔案都必須共用相容的結構定義。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
範例
以下範例會使用結構定義自動偵測功能,建立名為 sales
的外部資料表,且此表會連結至儲存在 Cloud Storage 中的 CSV 檔案:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv']);
以下範例會明確指定結構定義,並略過 CSV 檔案中的第一列:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales ( Region STRING, Quarter STRING, Total_Sales INT64 ) OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv'], skip_leading_rows = 1);
bq
如要建立外部資料表,請使用 bq mk
指令搭配 --external_table_definition
旗標。這個標記包含資料表定義檔案或內嵌資料表定義的路徑。
選項 1:資料表定義檔
使用 bq mkdef
指令建立資料表定義檔案,然後將檔案路徑傳遞至 bq mk
指令,如下所示:
bq mkdef --source_format=SOURCE_FORMAT \ BUCKET_PATH > DEFINITION_FILE bq mk --table \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
更改下列內容:
SOURCE_FORMAT
:外部資料來源的格式。例如:CSV
。BUCKET_PATH
:包含資料表資料的 Cloud Storage 值區路徑,格式為gs://bucket_name/[folder_name/]file_pattern
。您可以在
file_pattern
中指定一個星號 (*
) 萬用字元,從值區中選取多個檔案。例如gs://mybucket/file00*.parquet
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區。以下範例顯示有效的
uris
值:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
、gs://bucket1/path1/*
指定以多個檔案為目標的
uris
值時,所有檔案都必須共用相容的結構定義。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
DEFINITION_FILE
:本機電腦上資料表定義檔的路徑。DATASET_NAME
:包含資料表的資料集名稱。TABLE_NAME
:您要建立的資料表名稱。SCHEMA
:指定 JSON 結構定義檔的路徑,或以field:data_type,field:data_type,...
格式指定結構定義。
範例:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
如要使用結構定義自動偵測功能,請在 mkdef
指令中設定 --autodetect=true
標記,並省略結構定義:
bq mkdef --source_format=CSV --autodetect=true \
gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable
選項 2:內嵌資料表定義
您可以直接將資料表定義傳遞至 bq mk
指令,而非建立資料表定義檔:
bq mk --table \ --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH \ DATASET_NAME.TABLE_NAME \ SCHEMA
更改下列內容:
SOURCE_FORMAT
:外部資料來源的格式例如
CSV
。BUCKET_PATH
:包含資料表資料的 Cloud Storage 值區路徑,格式為gs://bucket_name/[folder_name/]file_pattern
。您可以在
file_pattern
中指定一個星號 (*
) 萬用字元,從值區中選取多個檔案。例如gs://mybucket/file00*.parquet
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區。以下範例顯示有效的
uris
值:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
、gs://bucket1/path1/*
指定以多個檔案為目標的
uris
值時,所有檔案都必須共用相容的結構定義。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
DATASET_NAME
:含有資料表的資料集名稱。TABLE_NAME
:您要建立的資料表名稱。SCHEMA
:指定 JSON 結構定義檔的路徑,或以field:data_type,field:data_type,...
格式指定結構定義。如要使用結構定義自動偵測功能,請省略這個引數。
範例:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
呼叫 tables.insert
方法 API 方法,並在您傳入的 Table
資源中建立 ExternalDataConfiguration
。
指定 schema
屬性,或將 autodetect
屬性設為 true
,為支援的資料來源啟用結構定義自動偵測功能。
Java
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
在分區資料上建立外部資料表
您可以為位於 Cloud Storage 中的 Hive 分區資料建立外部資料表。建立外部分區資料表後,您就無法變更分區鍵。您需要重新建立資料表才能變更分割鍵。
如要為 Hive 分區資料建立外部資料表,請選擇下列其中一個選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
- 在「Explorer」窗格中展開專案並選取資料集。
- 按一下 「查看動作」,然後點選「建立資料表」。系統會開啟「Create table」窗格。
- 在「Source」部分中,指定下列詳細資料:
- 在「Create table from」(使用下列資料建立資料表) 部分,選取「Google Cloud Storage」。
- 針對「Select file from Cloud Storage bucket」(從 Cloud Storage 值區選取檔案),請使用萬用字元輸入 Cloud Storage 資料夾的路徑。例如
my_bucket/my_files*
。Cloud Storage 值區的位置必須與要建立、附加或覆寫的表格所在的資料集位置相同。 - 從「File format」清單中選取檔案類型。
- 勾選「Source data partitioning」(來源資料分割)核取方塊,然後在「Select Source URI Prefix」(選取來源 URI 前置字串) 中輸入 Cloud Storage URI 前置字串。例如:
gs://my_bucket/my_files
。 - 在「Partition inference mode」部分中,選取下列其中一個選項:
- 自動推論類型:將分區結構定義偵測模式設為
AUTO
。 - 所有資料欄皆為字串:將分區結構定義偵測模式設為
STRINGS
。 - 提供自己的:將分區結構定義偵測模式設為
CUSTOM
,然後手動輸入分區鍵的結構定義資訊。詳情請參閱「提供自訂分區索引鍵結構定義」。
- 自動推論類型:將分區結構定義偵測模式設為
- 選用:如要要求在對這個資料表進行的所有查詢中使用分區篩選器,請選取「Require partition filter」(需要分區篩選器) 核取方塊。使用分區篩選器可以降低成本並提升效能。詳情請參閱「在查詢中要求分區鍵的子句篩選器」。
- 在「Destination」(目的地) 部分中,指定下列詳細資料:
- 在「Project」(專案) 部分,選取要建立資料表的專案。
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」中,輸入要建立的資料表名稱。
- 在「Table type」(資料表類型) 中,選取「External table」(外部資料表)。
- 在「Schema」(結構定義) 部分輸入結構定義。
- 如要啟用結構定義的自動偵測功能,請選取「自動偵測」。
- 如要忽略含有與結構定義不符之額外資料欄值的資料列,請展開「進階選項」部分,然後選取「不明的值」。
- 點選「建立資料表」。
SQL
使用 CREATE EXTERNAL TABLE
DDL 陳述式。
以下範例會自動偵測 Hive 分區索引鍵:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
更改下列內容:
SOURCE_FORMAT
:外部資料來源的格式,例如PARQUET
GCS_URIS
:Cloud Storage 資料夾的路徑,使用萬用字元格式GCS_URI_SHARED_PREFIX
:不含萬用字元的來源 URI 前置字串BOOLEAN
:是否要在查詢時要求述詞篩選器。這個標記是選用的,預設值為false
。
以下範例會在 WITH PARTITION COLUMNS
子句中列出自訂 Hive 分區索引鍵和類型,以便使用自訂分區索引鍵和類型:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS (PARTITION_COLUMN_LIST) OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
更改下列內容:
PARTITION_COLUMN_LIST
:列出 Cloud Storage 資料夾路徑中相同順序的資料欄,格式如下:
KEY1 TYPE1, KEY2 TYPE2
以下範例會建立外部分區資料表。這個指令會使用結構定義自動偵測功能,同時偵測檔案結構定義和巢狀分割區版面配置。如果外部路徑為 gs://bucket/path/field_1=first/field_2=1/data.parquet
,系統會將分區欄位偵測為 field_1
(STRING
) 和 field_2
(INT64
)。
CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable WITH PARTITION COLUMNS OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
以下範例會明確指定分區欄,藉此建立外部分區資料表。此範例假設外部檔案路徑具有 gs://bucket/path/field_1=first/field_2=1/data.parquet
模式。
CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable WITH PARTITION COLUMNS ( field_1 STRING, -- column order must match the external path field_2 INT64) OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
bq
首先,請使用 bq mkdef
指令建立資料表定義檔:
bq mkdef \ --source_format=SOURCE_FORMAT \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ GCS_URIS > DEFINITION_FILE
更改下列內容:
SOURCE_FORMAT
:外部資料來源的格式。例如:CSV
。PARTITIONING_MODE
:Hive 分區模式。請使用下列其中一個值:AUTO
:自動偵測索引鍵名稱和類型。STRINGS
:自動將索引鍵名稱轉換為字串。CUSTOM
:在來源 URI 前置字串中編碼索引鍵結構定義。
GCS_URI_SHARED_PREFIX
:來源 URI 前置字串。BOOLEAN
:指定是否要在查詢時要求述詞篩選器。這個標記是選用的,預設值為false
。GCS_URIS
:Cloud Storage 資料夾的路徑,使用萬用字元格式。DEFINITION_FILE
:本機電腦上資料表定義檔的路徑。
如果 PARTITIONING_MODE
是 CUSTOM
,請在來源 URI 前置字串中加入分區索引鍵結構定義,並使用以下格式:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
建立資料表定義檔後,請使用 bq mk
指令建立外部資料表:
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,...
格式指定結構定義。如要使用結構定義自動偵測功能,請省略這個引數。
範例
以下範例使用 AUTO
Hive 分割模式:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
以下範例使用 STRING
Hive 分割模式:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
以下範例使用 CUSTOM
Hive 分割模式:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
如要使用 BigQuery API 設定 Hive 分區,請在建立資料表定義檔時,在 ExternalDataConfiguration 物件中加入 hivePartitioningOptions 物件。
如果您將 hivePartitioningOptions.mode
欄位設為 CUSTOM
,就必須在 hivePartitioningOptions.sourceUriPrefix
欄位中對分區索引鍵結構定義進行編碼,如下所示:gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
如要強制在查詢時使用述詞篩選器,請將 hivePartitioningOptions.requirePartitionFilter
欄位設為 true
。
Java
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
查詢外部資料表
詳情請參閱「查詢外部資料表中的 Cloud Storage 資料」。
將外部資料表升級為 BigLake
只要將外部資料表連結至連線,就能將 Cloud Storage 資料表升級為 BigLake 資料表。如果您想在 BigLake 資料表中使用中繼資料快取,可以同時指定相關設定。如要取得來源格式和來源 URI 等資料表詳細資料,請參閱「取得資料表資訊」。
如要將外部資料表更新為 BigLake 資料表,請選取下列其中一個選項:
SQL
使用 CREATE OR REPLACE EXTERNAL TABLE
DDL 陳述式更新資料表:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT} OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
請依指示取代下列項目:
PROJECT_ID
:包含資料表的專案名稱DATASET
:含有資料表的資料集名稱EXTERNAL_TABLE_NAME
:資料表名稱REGION
:包含連線的區域CONNECTION_ID
:要使用的連線名稱如要使用 預設連線,請指定
DEFAULT
,而非包含REGION.CONNECTION_ID
的連線字串。TABLE_FORMAT
:資料表使用的格式更新資料表時無法變更這項設定。
BUCKET_PATH
:包含外部資料表資料的 Cloud Storage 值區路徑,格式為['gs://bucket_name/[folder_name/]file_name']
。您可以在路徑中指定一個星號 (
*
) 萬用字元,從值區中選取多個檔案。例如,['gs://mybucket/file_name*']
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區。以下範例顯示有效的
uris
值:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
指定目標為多個檔案的
uris
值時,所有檔案都必須共用相容的結構定義。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
STALENESS_INTERVAL
:指定是否允許作業使用針對資料表的快取中繼資料,以及作業必須使用多新鮮的快取中繼資料如要進一步瞭解中繼資料快取的考量事項,請參閱「為提升效能而快取中繼資料」。
如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的 間隔文字常值。例如,指定
INTERVAL 4 HOUR
的過時間隔為 4 小時。使用這個值時,如果快取的中繼資料在過去 4 小時內已重新整理,對資料表執行的作業就會使用快取的中繼資料。如果快取的中繼資料較舊,則操作會改為從 Cloud Storage 擷取中繼資料。CACHE_MODE
:指定中繼資料快取是否自動或手動重新整理如要進一步瞭解中繼資料快取的考量事項,請參閱「為提升效能而快取中繼資料」。
將其設為
AUTOMATIC
,即可按照系統定義的間隔 (通常為 30 到 60 分鐘) 重新整理中繼資料快取。如果您想依照指定的時間表重新整理中繼資料快取,請將其設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您必須設定CACHE_MODE
。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
使用 bq mkdef
和 bq update
指令更新資料表:
產生外部資料表定義,說明要變更的資料表層面:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
更改下列內容:
PROJECT_ID
:包含連線的專案名稱REGION
:包含連線的區域CONNECTION_ID
:要使用的連線名稱TABLE_FORMAT
:資料表使用的格式。更新資料表時無法變更這項設定。CACHE_MODE
:指定中繼資料快取是自動或手動重新整理。如要進一步瞭解中繼資料快取考量事項,請參閱「中繼資料快取可提升效能」。將其設為
AUTOMATIC
,即可按照系統定義的間隔 (通常為 30 到 60 分鐘) 重新整理中繼資料快取。如果您想依據自訂的時間表重新整理中繼資料快取,請將其設為
MANUAL
。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE
系統程序來重新整理快取。如果
STALENESS_INTERVAL
設為大於 0 的值,您必須設定CACHE_MODE
。BUCKET_PATH
:包含外部資料表資料的 Cloud Storage 值區路徑,格式為gs://bucket_name/[folder_name/]file_name
。您可以在路徑中指定一個星號 (
*
) 萬用字元,藉此限制從值區中選取的檔案。例如,gs://mybucket/file_name*
。詳情請參閱「Cloud Storage URI 的萬用字元支援」。您可以提供多個路徑,為
uris
選項指定多個值區。以下範例顯示有效的
uris
值:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.csv
gs://bucket/path1/*,gs://bucket/path2/file00*
指定以多個檔案為目標的
uris
值時,所有檔案都必須共用相容的結構定義。如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。
DEFINITION_FILE
:您要建立的資料表定義檔案名稱。
使用新的外部資料表定義更新資料表:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
更改下列內容:
STALENESS_INTERVAL
:指定作業是否會使用針對資料表的快取中繼資料,以及作業必須使用多新鮮的快取中繼資料。如要進一步瞭解中繼資料快取的考量事項,請參閱「為提升效能而快取中繼資料」。如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。
如要啟用中繼資料快取功能,請使用
INTERVAL
資料類型說明文件中所述的Y-M D H:M:S
格式,指定 30 分鐘至 7 天之間的間隔值。例如,指定0-0 0 4:0:0
為 4 小時的過時間隔。使用這個值時,如果資料表在過去 4 小時內已重新整理,針對資料表執行的作業會使用快取的中繼資料。如果快取的中繼資料較舊,作業會改為從 Cloud Storage 擷取中繼資料。DEFINITION_FILE
:您建立或更新的資料表定義檔案名稱。PROJECT_ID
:包含資料表的專案名稱DATASET
:含有資料表的資料集名稱EXTERNAL_TABLE_NAME
:資料表名稱
Cloud Storage 資源路徑
建立 Cloud Storage 資料來源的外部資料表時,您必須提供資料路徑。
Cloud Storage 資源路徑包含值區名稱和物件 (檔名)。例如,如果 Cloud Storage 值區的名稱為 mybucket
,且資料檔案的名稱為 myfile.csv
,則資源路徑會是 gs://mybucket/myfile.csv
。
BigQuery 不支援 Cloud Storage 資源路徑在初始雙斜線後還有多個連續斜線。Cloud Storage 物件名稱可以包含多個連續的斜線 (「/」) 字元,但 BigQuery 會將多個連續斜線轉換為一個斜線。舉例來說,下列資源路徑在 Cloud Storage 中有效,但在 BigQuery 中則無效:gs://bucket/my//object//name
。
如何擷取 Cloud Storage 資源路徑:
開啟 Cloud Storage 主控台。
瀏覽至含有來源資料的物件 (檔案) 位置。
按一下物件的名稱。
「Object details」頁面隨即開啟。
複製「gsutil URI」欄位中提供的值,開頭為
gs://
。
Cloud Storage URI 的萬用字元支援
如果資料分成多個檔案,您可以使用星號 (*) 萬用字元選取多個檔案。使用星號萬用字元時,必須遵循下列規則:
- 星號可以出現在物件名稱內或物件名稱的末端。
- 系統不支援使用多個星號。例如,
gs://mybucket/fed-*/temp/*.csv
路徑無效。 - 系統不支援在值區名稱中使用星號。
範例:
以下範例說明如何選取所有開頭為
gs://mybucket/fed-samples/fed-sample
前置字元的資料夾中的所有檔案:gs://mybucket/fed-samples/fed-sample*
以下範例說明如何只選取名為
fed-samples
的資料夾和任何fed-samples
子資料夾中,具有.csv
副檔名的檔案:gs://mybucket/fed-samples/*.csv
以下範例說明如何在名為
fed-samples
的資料夾中,選取命名模式為fed-sample*.csv
的檔案。這個範例不會選取fed-samples
子資料夾中的檔案。gs://mybucket/fed-samples/fed-sample*.csv
使用 bq 指令列工具時,在某些平台上可能需要逸出星號。
建立連結至 Datastore 或 Firestore 匯出檔案的外部資料表時,您無法使用星號萬用字元。
限制
如要瞭解外部資料表的限制,請參閱「外部資料表限制」。
後續步驟
- 瞭解外部資料表。
- 瞭解 BigLake 資料表。