BigQuery 接続 - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

BigQuery 接続

AWS Glue for Spark を使用して、AWS Glue 4.0 以降のバージョンの Google BigQuery のテーブルからの読み取りとテーブルへの書き込みを行うことができます。Google SQL クエリを使用して BigQuery からの読み取りを行うことができます。AWS Glue 接続を介して AWS Secrets Manager で保存されている認証情報を使用して BigQuery に接続します。

Google BigQuery の詳細については、Google Cloud BigQuery のウェブサイトを参照してください。

BigQuery 接続を設定する

AWS Glue から Google BigQuery へ接続するには、Google Cloud Platform の認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを Google BigQuery AWS Glue 接続に関連付ける必要があります。

BigQuery への接続を設定するには:
  1. Google Cloud Platform で、関連するリソースを作成して特定します。

  2. Google Cloud Platform で、サービスアカウントの認証情報を作成してエクスポートします。

    BigQuery 認証情報ウィザードを使用すると、「認証情報の作成」というステップを迅速に実行できます。

    GCP でサービスアカウントを作成するには、「サービス アカウントを作成する」にあるチュートリアルに従ってください。

    • プロジェクトを選択するときは、BigQuery テーブルを含むプロジェクトを選択します。

    • サービスアカウントの GCP IAM ロールを選択するときは、BigQuery テーブルの読み取り、書き込み、作成を行う BigQuery ジョブを実行するための適切な権限を付与するロールを追加または作成します。

    サービスアカウントの認証情報を作成するには、「サービス アカウント キーを作成する」にあるチュートリアルに従ってください。

    • キータイプを選択するときは、[JSON] を選択します。

    これで、サービスアカウントの認証情報が記載された JSON ファイルがダウンロードされたはずです。これは次のように表示されます。

    { "type": "service_account", "project_id": "*****", "private_key_id": "*****", "private_key": "*****", "client_email": "*****", "client_id": "*****", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "*****", "universe_domain": "googleapis.com" }
  3. ダウンロードした認証情報ファイルを base64 でエンコードします。AWS CloudShell セッションなどでは、コマンドラインから cat credentialsFile.json | base64 -w 0 コマンドを実行してこれを実行できます。このコマンドの出力 credentialString を保持してください。

  4. AWS Secrets Manager で、Google Cloud Platform の認証情報を使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「AWS Secrets Manager シークレットを作成する」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 secretName を保存しておきます。

    • キーと値のペアを選択するときは、credentialString という値を持つキー credentials のペアを作成します。

  5. AWS Glue データカタログで、「AWS Glue 接続の追加」にある手順に従って接続を作成します。接続を作成したら、次のステップのために接続名 connectionName を保存しておきます。

    • [接続タイプ] を選択するときは、Google BigQuery を選択してください。

    • [AWS Secret] をクリックして、secretName を入力します。

  6. AWS Glue ジョブに関連付けられている IAM ロールに secretName を読み取るアクセス許可を付与します。

  7. AWS Glue ジョブ設定で、追加のネットワーク接続として connectionName を指定します。

BigQuery テーブルから読み取る

前提条件:

  • 読み取る対象の BigQuery テーブル。フォーム [dataset].[table] には BigQuery のテーブル名とデータセット名が必要です。これに tableName と名前を付けます。

  • BigQuery テーブルの請求プロジェクト。そのためには、プロジェクトの名前、parentProject が必要です。請求元の親プロジェクトがない場合は、テーブルを含むプロジェクトを使用してください。

  • BigQuery の認証情報。「AWS Glue で接続認証情報を管理するには」の手順を実行して、認証情報を設定します。AWS Glue 接続、connectionName の名前が必要になります。

例:

bigquery_read = glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "sourceType": "table", "table": "tableName", }

クエリを指定して、DynamicFrame に返される結果をフィルタリングすることもできます。querysourceTypeviewsEnabled および materializationDataset を設定する必要があります。

例:

追加の前提条件:

BigQuery がクエリのマテリアライズドビューを書き込むことのできる BigQuery データセット、materializationDataset を作成または特定する必要があります。

materializationDataset にテーブルを作成するには、サービスアカウントに適切な GCP IAM アクセス許可を付与する必要があります。

glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "materializationDataset": materializationDataset, "parentProject": "parentProject", "viewsEnabled": "true", "sourceType": "query", "query": "select * from bqtest.test" } )

BigQuery テーブルへ書き込む

この例では BigQuery サービスに直接書き込みます。BigQuery は「間接」書き込み方法もサポートしています。間接書き込みの設定の詳細については、「Google BigQuery での間接書き込みを使用する」を参照してください。

前提条件:

  • 書き込む対象の BigQuery テーブル。フォーム [dataset].[table] には BigQuery のテーブル名とデータセット名が必要です。自動的に作成される新しいテーブル名を指定することもできます。これに tableName と名前を付けます。

  • BigQuery テーブルの請求プロジェクト。そのためには、プロジェクトの名前、parentProject が必要です。請求元の親プロジェクトがない場合は、テーブルを含むプロジェクトを使用してください。

  • BigQuery の認証情報。「AWS Glue で接続認証情報を管理するには」の手順を実行して、認証情報を設定します。AWS Glue 接続、connectionName の名前が必要になります。

例:

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "writeMethod": "direct", "table": "tableName", } )

BigQuery 接続オプションのリファレンス

  • project — デフォルト: Google Cloud サービスアカウントのデフォルト。読み込み/書き込みに使用されます。テーブルに関連付けられている Google Cloud プロジェクトの名前。

  • table — (必須) 読み込み/書き込みに使用されます。[[project:]dataset.] フォーマット内の BigQuery テーブルの名前。

  • datasettable オプションで定義されていない場合は必須。読み込み/書き込みに使用されます。BigQuery テーブルを含むデータセットの名前。

  • parentProject — デフォルト: Google Cloud サービスアカウントのデフォルト。読み込み/書き込みに使用されます。請求に使用される project に関連付けられた Google Cloud プロジェクトの名前。

  • sourceType — 読み取りに使用。読み取り時には必須です。有効値: tablequery AWS Glue にテーブルで読み取るかクエリで読み取るかを通知します。

  • materializationDataset — 読み取りに使用。有効な値: 文字列。ビューのマテリアライゼーションの保存に使用される BigQuery データセットの名前。

  • viewsEnabled — 読み取りに使用。デフォルト: false。有効な値: true、false。BigQuery がビューを使用するかどうかを設定します。

  • query — 読み取りに使用。viewsEnabled が true のときに使用されます。GoogleSQL DQL クエリ。

  • temporaryGcsBucket — 書き込みに使用。writeMethod がデフォルト (indirect) に設定されている場合は必須です。BigQuery への書き込み中に中間形式のデータを保存するために使用される Google Cloud Storage バケットの名前。

  • writeMethod - デフォルト: indirect。有効な値: directindirect。書き込みに使用。データの書き込みに使用する方法を指定します。

    • direct に設定すると、コネクタは BigQuery Storage Write API を使用して書き込みを行います。

    • indirect に設定すると、コネクタは Google Cloud Storage に書き込み、読み取り操作を使用して BigQuery に転送します。Google Cloud サービスアカウントには適切な GCS アクセス許可が必要です。

Google BigQuery での間接書き込みを使用する

この例では、Google Cloud ストレージにデータを書き込み、それを Google BigQuery にコピーする間接書き込みを使用しています。

前提条件:

Google Cloud Storage の一時的なバケット、temporaryBucket が必要になります。

AWS Glue の GCP サービスアカウントの GCP IAM ロールには、temporaryBucket にアクセスするための適切な GCS アクセス許可が必要です。

追加設定:

BigQuery による間接書き込みを設定するには:
  1. BigQuery 接続を設定する にアクセスして検索するか、GCP 認証情報の JSON ファイルを再ダウンロードします。ジョブで使用する Google BigQuery AWS Glue 接続の AWS Secrets Manager シークレットである secretName を特定します。

  2. 認証情報 JSON ファイルを、適切に安全な Amazon S3 の場所にアップロードします。ファイルへのパス、s3secretpath は、今後の手順に備えて保持してください。

  3. secretName を編集し、spark.hadoop.google.cloud.auth.service.account.json.keyfile キーを追加します。s3secretpath に値を設定します。

  4. AWS Glue ジョブに、s3secretpath にアクセスするための Amazon S3 IAM アクセス許可を付与します。

一時的な GCS バケットの場所を書き込みメソッドに指定できるようになりました。indirect がこれまでデフォルトだったように、writeMethod を指定する必要はありません。

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "temporaryGcsBucket": "temporaryBucket", "table": "tableName", } )