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 アカウント ID
    • DATABASE_NAME: AWS Glue データベース名

必要な権限

連携データセットの作成に必要な権限を取得するには、BigQuery 管理者roles/bigquery.admin)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、連携データセットの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

連携データセットを作成するには、次の権限が必要です。

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

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。

連携データセットを作成する

連携データセットを作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. [エクスプローラ] パネルで、データセットを作成するプロジェクトを選択します。

  3. アクション オプションを開いて、[データセットを作成] をクリックします。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [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 接続を選択します。
    • その他のデフォルトの設定はそのままにします。

  5. [データセットを作成] をクリックします。

SQL

CREATE EXTERNAL SCHEMA データ定義言語(DDL)ステートメントを使用します。

  1. Google 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 Resource Name(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 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 を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    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 を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. 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 テーブルの次のフィールドによって決まります。

  • InputFormatTable.StorageDescriptor.InputFormat
  • OutputFormatTable.StorageDescriptor.OutputFormat
  • SerializationLibTable.StorageDescriptor.SerdeInfo.SerializationLibrary

唯一の例外は、TableTypeTable.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 はサポートされていません。

次のステップ