查詢 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

使用 --external_table_definition 旗標執行 bq query 指令。

(選用) 提供 --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 bucket 的路徑,其中包含表格的資料,格式為 gs://bucket_name/[folder_name/]file_pattern

    如要在 file_pattern 中選取 bucket 中的多個檔案,請在 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 bucket 的路徑,其中包含表格的資料,格式為 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 物件。

後續步驟