查詢 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」部分:

所需權限

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

查詢 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) 處理程序而言非常有用。

如要查詢外部資料來源,但不想建立永久資料表,請為臨時資料表提供資料表定義,然後在指令或呼叫中使用該資料表定義來查詢臨時資料表。您可以透過下列任一方式提供資料表定義:

系統會使用資料表定義檔或提供的結構定義來建立臨時外部資料表,然後對臨時外部資料表執行查詢。

使用臨時外部資料表時,並不會在某個 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 執行查詢,請按照下列步驟操作:

  1. 建立 Job 物件
  2. 使用 JobConfiguration 物件填入 Job 物件的 configuration 部分。
  3. 使用 JobConfigurationQuery 物件填入 JobConfiguration 物件的 query 部分。
  4. 使用 ExternalDataConfiguration 物件填入 JobConfigurationQuery 物件的 tableDefinitions 部分。在 connectionId 欄位中指定要用於連線至 Cloud Storage 的連線。
  5. 呼叫 jobs.insert 方法可非同步執行查詢,而呼叫 jobs.query 方法則可同步執行查詢,並傳入 Job 物件。

後續步驟