建立 AWS Glue 聯合資料集

本文說明如何在 BigQuery 中建立連結至 AWS Glue 現有資料庫的聯合資料集。

聯合資料集是 BigQuery 與外部資料來源在資料集層級的連結。聯合資料集中的資料表會自動從對應的外部資料來源填入資料表。您可以在 BigQuery 中直接查詢這些資料表,但無法修改、新增或刪除資料。不過,您在外部資料來源中進行的任何更新,都會自動反映在 BigQuery 中。

事前準備

確認您已連線,可存取 AWS Glue 資料。

  • 如要建立或修改連線,請按照「連結至 Amazon S3」一文中的說明操作。建立連線時,請在 BigQuery 的 AWS Identity and Access Management 政策中,加入 AWS Glue 的下列政策陳述式。除了 Amazon S3 值區的其他權限外,請一併加入這項陳述式,該值區會儲存 AWS Glue 資料表中的資料。

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }

    更改下列內容:

    • REGION:AWS 區域,例如 us-east-1
    • ACCOUNT_ID::12 碼的 AWS 帳戶 ID
    • DATABASE_NAME:AWS Glue 資料庫名稱

所需權限

如要取得建立聯邦式資料集所需的權限,請要求管理員授予您 BigQuery 管理員 (roles/bigquery.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備建立聯邦資料集所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要建立聯邦資料集,必須具備下列權限:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

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

如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。

建立聯邦資料集

如要建立聯邦資料集,請按照下列步驟操作:

主控台

  1. 在 Trusted Cloud 控制台中開啟 BigQuery 頁面。

    前往 BigQuery 頁面

  2. 在「Explorer」面板中,選取要建立資料集的專案。

  3. 展開「動作」選項,然後按一下「建立資料集」

  4. 在「建立資料集」頁面中,執行下列操作:

    • 針對「Dataset ID」(資料集 ID),輸入唯一的資料集名稱。
    • 在「位置類型」部分,選擇資料集的 AWS 位置,例如 aws-us-east-1。建立資料集後,就無法變更位置。
    • 在「外部資料集」部分,請執行下列操作:

      • 勾選「外部資料集的連結」旁邊的方塊。
      • 在「External dataset type」(外部資料集類型) 中,選取 AWS Glue
      • 在「外部來源」中,輸入 aws-glue://,然後輸入 AWS Glue 資料庫的 Amazon Resource Name (ARN),例如 aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
      • 在「連線 ID」部分,選取 AWS 連線。
    • 保留其他預設設定。

  5. 點選「建立資料集」

SQL

使用CREATE EXTERNAL SCHEMA資料定義語言 (DDL) 陳述式

  1. 前往 Trusted Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入下列陳述式:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    取代下列項目:

    • DATASET_NAME:BigQuery 中新資料集的名稱。
    • PROJECT_ID:您的專案 ID。
    • CONNECTION_LOCATION:AWS 連線的位置,例如 aws-us-east-1
    • CONNECTION_NAME:AWS 連線的名稱。
    • AWS_GLUE_SOURCE:AWS Glue 資料庫的Amazon 資源名稱 (ARN),並加上識別來源的前置字串,例如 aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
    • LOCATION:BigQuery 中新資料集的位置,例如 aws-us-east-1。建立資料集後,就無法變更位置。

  3. 按一下「執行」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

bq

在指令列環境中,使用 bq mk 指令建立資料集:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

更改下列內容:

  • LOCATION:BigQuery 中新資料集的位置,例如 aws-us-east-1。建立資料集後,就無法變更位置。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • AWS_GLUE_SOURCE:AWS Glue 資料庫的Amazon 資源名稱 (ARN),例如 arn:aws:glue:us-east-1:123456789:database/test_database
  • PROJECT_ID:您的 BigQuery 專案 ID。
  • CONNECTION_LOCATION:AWS 連線的位置,例如 aws-us-east-1
  • CONNECTION_NAME:AWS 連線的名稱。
  • DATASET_NAME:BigQuery 中新資料集的名稱。如要在非預設專案中建立資料集,請採用下列格式將專案 ID 新增至資料集名稱:PROJECT_ID:DATASET_NAME

Terraform

使用 google_bigquery_dataset 資源

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

以下範例會建立 AWS Glue 聯合資料集:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

如要在 Trusted Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Trusted Cloud 專案。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf

    視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Trusted Cloud 專案即可查看結果。在 Trusted Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

API

使用已定義的資料集資源和 AWS Glue 資料庫的 externalDatasetReference 欄位,呼叫 datasets.insert 方法

列出聯邦資料集中的資料表

如要列出可在聯邦資料集中查詢的資料表,請參閱「列出資料集」。

取得資料表資訊

如要取得聯邦資料集中的資料表資訊 (例如結構定義詳細資料),請參閱「取得資料表資訊」。

控管資料表的存取權

如要管理對聯邦資料集中資料表的存取權,請參閱「使用 IAM 控管資源存取權」。

此外,BigQuery 也支援資料列層級安全防護資料欄層級安全防護資料遮蓋,適用於聯邦資料集中的資料表。

如果執行可能導致安全性政策失效的結構定義作業 (例如刪除 AWS Glue 中的資料欄),工作就會失敗,直到政策更新為止。此外,如果您刪除 AWS Glue 中的資料表並重新建立,安全性政策就不會再套用至重新建立的資料表。

查詢 AWS Glue 資料

查詢聯合式資料集中的資料表,與查詢任何其他 BigQuery 資料表相同。

您可以查詢下列格式的 AWS Glue 資料表:

  • CSV (壓縮和未壓縮)
  • JSON (壓縮和未壓縮)
  • Parquet
  • ORC
  • Avro
  • Iceberg
  • Delta Lake

資料表對應詳細資料

您在 AWS Glue 資料庫中授權存取的每個資料表,都會以對應資料表的形式顯示在 BigQuery 資料集中。

格式

每個 BigQuery 資料表的格式取決於相應 AWS Glue 資料表的下列欄位:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

但 Iceberg 資料表是例外,這類資料表會使用 TableType (Table.Parameters["table_type"]) 欄位。

舉例來說,具有下列欄位的 AWS Glue 資料表會對應至 BigQuery 中的 ORC 資料表:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

位置

每個 BigQuery 資料表的位置取決於下列因素:

  • Iceberg 資料表:AWS Glue 資料表中的 Table.Parameters["metadata_location"] 欄位
  • 非 Iceberg 非分區資料表:AWS Glue 資料表中的 Table.StorageDescriptor.Location 欄位
  • 非 Iceberg 分區資料表:AWS Glue GetPartitions API

其他屬性

此外,系統會自動將部分 AWS Glue 資料表屬性對應至 BigQuery 中特定格式的選項:

格式 SerializationLib AWS Glue 資料表值 BigQuery 選項
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

在聯邦資料集中建立檢視表

您無法在同盟資料集中建立檢視區塊。不過,您可以在標準資料集中建立檢視表,並以聯邦資料集中的資料表為基礎。詳情請參閱建立檢視畫面

刪除聯邦資料集

刪除聯合資料集與刪除任何其他 BigQuery 資料集相同。詳情請參閱「刪除資料集」。

定價

如要瞭解定價資訊,請參閱 BigQuery Omni 定價

限制

  • 適用所有 BigQuery Omni 限制
  • 您無法在 AWS Glue 聯邦資料集的資料表中新增、刪除或更新資料或中繼資料。
  • 您無法在 AWS Glue 聯邦資料集中建立新的資料表、檢視區塊或具體化檢視區塊。
  • 系統不支援 INFORMATION_SCHEMA 檢視
  • 不支援中繼資料快取
  • 與資料表建立預設值相關的資料集層級設定不會影響聯邦資料集,因為您無法手動建立資料表。
  • Avro 資料表不支援 Apache Hive 資料類型 UNION
  • 適用外部表格限制

後續步驟