查詢 BigLake 資料表中的 Cloud Storage 資料
本文件說明如何查詢儲存在 Cloud Storage BigLake 資料表中的資料。
事前準備
確認您有 Cloud Storage BigLake 資料表。
必要的角色
如要查詢 Cloud Storage BigLake 資料表,請確認您具備下列角色:
- BigQuery 資料檢視器 (
roles/bigquery.dataViewer
) - BigQuery 使用者 (
roles/bigquery.user
)
視您的權限而定,您可以授予自己這些角色,或請管理員授予這些角色。如要進一步瞭解如何授予角色,請參閱「查看可針對資源授予的角色」。
如要查看查詢 Cloud Storage BigLake 資料表所需的確切權限,請展開「Required permissions」部分:
所需權限
bigquery.jobs.create
bigquery.readsessions.create
(僅在您使用 BigQuery Storage Read API 讀取資料時才需要)bigquery.tables.get
bigquery.tables.getData
查詢 BigLake 資料表
建立 Cloud Storage BigLake 資料表後,您可以使用 GoogleSQL 語法查詢資料表,就像查詢標準 BigQuery 資料表一樣。例如:SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
。
使用外部資料處理工具查詢 BigLake 資料表
您可以搭配其他資料處理工具使用 BigQuery 連接器,存取 Cloud Storage 中的 BigLake 資料表。詳情請參閱「連接器」。
Apache Spark
以下範例使用 Dataproc,但也適用於使用 Spark-BigQuery 連接器的任何 Spark 部署作業。
在本範例中,您在建立叢集時,會將 Spark-BigQuery 連接器做為初始化動作提供。這項動作可讓您使用 Zeppelin 筆記本,並執行資料分析師使用者歷程。
Spark-BigQuery 連接器版本列於 GitHub GoogleCloudDataproc/spark-bigquery-connector 存放區中。
使用 Spark-BigQuery 連接器的初始化動作建立單節點叢集:
gcloud dataproc clusters create biglake-demo-cluster \ --optional-components=ZEPPELIN \ --region=REGION \ --enable-component-gateway \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar
Apache Hive
以下範例使用 Dataproc,但也適用於使用 Hive-BigQuery 連接器的任何 Hive 部署。
在這個範例中,您會在建立叢集時,將 Hive-BigQuery 連接器做為初始化動作提供。
Hive-BigQuery 連接器版本列於 GitHub 的 GoogleCloudDataproc/hive-bigquery-connector 存放區中。
使用 Hive-BigQuery 連接器的初始化動作建立單節點叢集:
gcloud dataproc clusters create biglake-hive-demo-cluster \ --region=REGION \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar
如要進一步瞭解 Hive-BigQuery 連接器,請參閱「使用 Hive-BigQuery 連接器」。
Dataflow
如要從 Dataflow 讀取 BigLake 資料表,請在 DIRECT_READ
模式下使用 Dataflow 連接器,以便使用 BigQuery Storage API。也支援從查詢字串讀取。請參閱 Apache Beam 說明文件中的 BigQuery I/O。
查詢臨時 BigLake 資料表
使用臨時資料表查詢外部資料來源,對於一次性、臨時查詢外部資料,或對擷取、轉換和載入 (ETL) 處理程序而言非常有用。
如要查詢外部資料來源,但不想建立永久資料表,請為臨時資料表提供資料表定義,然後在指令或呼叫中使用該資料表定義來查詢臨時資料表。您可以透過下列任一方式提供資料表定義:
- 資料表定義檔
- 內嵌結構定義
- JSON 結構定義檔案
系統會使用資料表定義檔或提供的結構定義來建立臨時外部資料表,然後對臨時外部資料表執行查詢。
使用臨時外部資料表時,並不會在某個 BigQuery 資料集中建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。
您可以使用 bq 指令列工具、API 或用戶端程式庫,建立和查詢連結到外部資料來源的臨時資料表。
bq
使用 bq query
指令,並加上 --external_table_definition
旗標。
(選用) 提供 --location
旗標,並將值設為您的位置。
如要使用資料表定義檔查詢連接外部資料來源的臨時資料表,請輸入下列指令。
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
更改下列內容:
LOCATION
:位置名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可以將該旗標的值設定為asia-northeast1
。您可以使用 .bigqueryrc 檔案設定位置的預設值。TABLE
:要建立的臨時資料表名稱。DEFINITION_FILE
:本機電腦上資料表定義檔的路徑。QUERY
:要提交至臨時資料表的查詢。
舉例來說,下列指令會使用名為 sales_def
的資料表定義檔,建立及查詢名為 sales
的臨時資料表。
bq query \
--external_table_definition=sales::sales_def@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
如要使用內嵌結構定義來查詢連結至外部資料來源的臨時資料表,請輸入下列指令。
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'query'
更改下列內容:
LOCATION
:位置名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可以將該旗標的值設定為asia-northeast1
。您可以使用 .bigqueryrc 檔案設定位置的預設值。TABLE
:要建立的臨時資料表名稱。SCHEMA
:內嵌結構定義,格式為field:data_type,field:data_type
。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 資源路徑」。
PROJECT_ID
:包含連線的專案。REGION
:包含連線的區域,例如us
。CONNECTION_ID
:連線名稱,例如myconnection
。QUERY
:要提交至臨時資料表的查詢。
舉例來說,下列指令會使用 Region:STRING,Quarter:STRING,Total_sales:INTEGER
結構定義,建立和查詢名為 sales
的臨時資料表,且此表會連結至儲存在 Cloud Storage 中的 CSV 檔案。
bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
如要使用 JSON 結構定義檔來查詢連接外部資料來源的臨時資料表,請輸入下列指令。
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'QUERY'
更改下列內容:
LOCATION
:位置名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可以將該旗標的值設定為asia-northeast1
。您可以使用 .bigqueryrc 檔案設定位置的預設值。SCHEMA_FILE
:您本機電腦上的 JSON 結構定義檔路徑。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 資源路徑」。
PROJECT_ID
:包含連線的專案。REGION
:包含連線的區域,例如us
。CONNECTION_ID
:連線名稱,例如myconnection
。QUERY
:要提交至臨時資料表的查詢。
舉例來說,下列指令會使用 /tmp/sales_schema.json
結構定義檔,建立和查詢名為 sales
的臨時資料表,且此表會連結至儲存在 Cloud Storage 中的 CSV 檔案。
bq query \ --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv@us.myconnection \ 'SELECT Region, Total_sales FROM sales'
API
如要使用 API 執行查詢,請按照下列步驟操作:
- 建立
Job
物件。 - 使用
JobConfiguration
物件填入Job
物件的configuration
部分。 - 使用
JobConfigurationQuery
物件填入JobConfiguration
物件的query
部分。 - 使用
ExternalDataConfiguration
物件填入JobConfigurationQuery
物件的tableDefinitions
部分。在connectionId
欄位中指定要用於連線至 Cloud Storage 的連線。 - 呼叫
jobs.insert
方法可非同步執行查詢,而呼叫jobs.query
方法則可同步執行查詢,並傳入Job
物件。
後續步驟
- 瞭解如何在 BigQuery 中使用 SQL。
- 瞭解 BigLake 資料表。
- 瞭解 BigQuery 配額。