建立 AWS Glue 聯合資料集
本文件說明如何在 BigQuery 中建立聯合資料集,並連結至 AWS Glue 中現有的資料庫。
聯合資料集是 BigQuery 與外部資料來源之間的資料集層級連結。聯合資料集中的資料表會從對應外部資料來源的資料表自動填入。您可以在 BigQuery 中直接查詢這些資料表,但無法進行修改、新增或刪除。不過,您在外部資料來源中所做的任何更新都會自動反映在 BigQuery 中。
事前準備
確認您已連線,可存取 AWS Glue 資料。
如要建立或修改連線,請按照「連結至 Amazon S3」一文中的指示操作。建立該連線時,請在 BigQuery 的 AWS 身分與存取權管理政策中加入下列 AWS Glue 政策陳述式。除了 AWS Glue 資料表儲存資料的 Amazon S3 值區中的其他權限外,請加入這項陳述式。
{ "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 帳戶 IDDATABASE_NAME
:AWS Glue 資料庫名稱
所需權限
如要取得建立聯合資料集所需的權限,請要求管理員授予您 BigQuery 管理員 (roles/bigquery.admin
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色包含建立聯合資料集所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要建立聯合資料集,您必須具備下列權限:
-
bigquery.datasets.create
-
bigquery.connections.use
-
bigquery.connections.delegate
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「IAM 簡介」。
建立聯合資料集
如要建立聯合資料集,請按照下列步驟操作:
主控台
在 Google Cloud 控制台開啟「BigQuery」頁面。
在「Explorer」面板中,選取要建立資料集的專案。
展開
「動作」選項,然後按一下「建立資料集」。在「Create dataset」頁面上執行下列操作:
- 針對「Dataset ID」(資料集 ID),輸入唯一的資料集名稱。
- 針對「Location type」(位置類型),選擇資料集的 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 連線。
保留其他預設設定。
點選「建立資料集」。
SQL
使用 CREATE EXTERNAL SCHEMA
資料定義語言 (DDL) 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
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 Resource Name (ARN),前置字串會標示來源,例如aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
。LOCATION
:新資料集在 BigQuery 中的所在位置,例如aws-us-east-1
。建立資料集後,就無法變更位置。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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 Resource Name (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" } }
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,該檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 將要建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
API
請呼叫 datasets.insert
方法,搭配已定義的 AWS Glue 資料庫資料集資源和 externalDatasetReference
欄位。
列出聯合資料集中的資料表
如要列出聯合資料集中可供查詢的資料表,請參閱「列出資料集」。
取得資料表資訊
如要取得聯合資料集中的資料表相關資訊 (例如結構定義詳細資料),請參閱「取得資料表資訊」一文。
控管資料表的存取權
如要管理聯合資料集中的資料表存取權,請參閱「使用 IAM 控管資源存取權」。
聯合資料集中的資料表也支援資料列層級安全性、資料欄層級安全性和資料遮罩。
可能會使安全性政策失效的結構定義作業 (例如在 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
。 - 適用外部資料表限制。
後續步驟
- 進一步瞭解 BigQuery Omni。
- 試試 BigQuery Omni 與 AWS 實驗室。