AWS Glue 連携データセットを作成する
このドキュメントでは、BigQuery で AWS Glue の既存のデータベースにリンクされる連携データセットを作成する方法について説明します。
連携データセットは、BigQuery と外部データソース間のデータセット レベルでの接続です。連携データセット内のテーブルは、対応する外部データソース内のテーブルから自動的に入力されます。BigQuery では、これらのテーブルに対して直接クエリを実行できますが、変更、追加、削除はできません。ただし、外部データソースでの更新は、BigQuery に自動的に反映されます。
準備
AWS Glue データにアクセスできる接続があることを確認します。
接続を作成または変更するには、Amazon S3 に接続するの手順を行います。この接続を作成するときに、BigQuery 用の AWS Identity and Access Management ポリシーに、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] ページを開きます。
[エクスプローラ] パネルで、データセットを作成するプロジェクトを選択します。
アクション オプションを開いて、[データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
- [Dataset ID] に、データセットの一意の名前を入力します。
- [ロケーション タイプ] で、データセットの AWS ロケーション(
aws-us-east-1
など)を選択します。データセットを作成した後で、そのロケーションを変更することはできません。 [外部データセット] で、次の操作を行います。
- [外部データセットへのリンク] の横にあるチェックボックスをオンにします。
- [外部データセットのタイプ] で [
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
)。データセットを作成した後に、そのロケーションを変更することはできません。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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 での新しいデータセットの名前。デフォルト プロジェクト以外のプロジェクトにデータセットを作成するには、PROJECT_ID
:DATASET_NAME
の形式で、そのプロジェクト ID をデータセット名に追加します。
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 プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
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 を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
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
テーブル マッピングの詳細
AWS Glue データベースでアクセス権を付与するすべてのテーブルは、BigQuery データセットで同等のテーブルとして表示されます。
形式
各 BigQuery テーブルの形式は、それぞれの AWS Glue テーブルの次のフィールドによって決まります。
InputFormat
(Table.StorageDescriptor.InputFormat
)OutputFormat
(Table.StorageDescriptor.OutputFormat
)SerializationLib
(Table.StorageDescriptor.SerdeInfo.SerializationLibrary
)
唯一の例外は、TableType
(Table.Parameters["table_type"]
)フィールドを使用する Iceberg テーブルです。
たとえば、次のフィールドを含む 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 の詳細を学習する。
- AWS ラボで BigQuery Omni を試す。