翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 への接続を設定するには:
Google Cloud Platform で、関連するリソースを作成して特定します。
接続したい BigQuery テーブルを含む GCP プロジェクトを作成または特定します。
BigQuery API を有効にします。詳細については、「Use the BigQuery Storage Read API to read table data
」を参照してください。
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" }
-
ダウンロードした認証情報ファイルを base64 でエンコードします。AWS CloudShell セッションなどでは、コマンドラインから
cat
コマンドを実行してこれを実行できます。このコマンドの出力credentialsFile.json
| base64 -w 0credentialString
を保持してください。AWS Secrets Manager で、Google Cloud Platform の認証情報を使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「AWS Secrets Manager シークレットを作成する」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名
secretName
を保存しておきます。-
キーと値のペアを選択するときは、
credentialString
という値を持つキーcredentials
のペアを作成します。
-
AWS Glue データカタログで、「AWS Glue 接続の追加」にある手順に従って接続を作成します。接続を作成したら、次のステップのために接続名
connectionName
を保存しておきます。[接続タイプ] を選択するときは、Google BigQuery を選択してください。
[AWS Secret] をクリックして、
secretName
を入力します。
AWS Glue ジョブに関連付けられている IAM ロールに
secretName
を読み取るアクセス許可を付与します。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 に返される結果をフィルタリングすることもできます。query
、sourceType
、viewsEnabled
および 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 テーブルの名前。 -
dataset
—table
オプションで定義されていない場合は必須。読み込み/書き込みに使用されます。BigQuery テーブルを含むデータセットの名前。 -
parentProject
— デフォルト: Google Cloud サービスアカウントのデフォルト。読み込み/書き込みに使用されます。請求に使用されるproject
に関連付けられた Google Cloud プロジェクトの名前。 -
sourceType
— 読み取りに使用。読み取り時には必須です。有効値:table
、query
AWS Glue にテーブルで読み取るかクエリで読み取るかを通知します。 -
materializationDataset
— 読み取りに使用。有効な値: 文字列。ビューのマテリアライゼーションの保存に使用される BigQuery データセットの名前。 -
viewsEnabled
— 読み取りに使用。デフォルト: false。有効な値: true、false。BigQuery がビューを使用するかどうかを設定します。 -
query
— 読み取りに使用。viewsEnabled
が true のときに使用されます。GoogleSQL DQL クエリ。 -
temporaryGcsBucket
— 書き込みに使用。writeMethod
がデフォルト (indirect
) に設定されている場合は必須です。BigQuery への書き込み中に中間形式のデータを保存するために使用される Google Cloud Storage バケットの名前。 -
writeMethod
- デフォルト:indirect
。有効な値:direct
、indirect
。書き込みに使用。データの書き込みに使用する方法を指定します。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 による間接書き込みを設定するには:
BigQuery 接続を設定する にアクセスして検索するか、GCP 認証情報の JSON ファイルを再ダウンロードします。ジョブで使用する Google BigQuery AWS Glue 接続の AWS Secrets Manager シークレットである
secretName
を特定します。-
認証情報 JSON ファイルを、適切に安全な Amazon S3 の場所にアップロードします。ファイルへのパス、
s3secretpath
は、今後の手順に備えて保持してください。 -
secretName
を編集し、spark.hadoop.google.cloud.auth.service.account.json.keyfile
キーを追加します。s3secretpath
に値を設定します。 -
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
", } )