AWS Glue Connector for Google BigQueryを使ってBigQueryからS3にデータを転送する

2021.05.31

データアナリティクス事業本部の森脇です。

今回は「AWS Glue Connector for Google BigQuery」を使って、BigQueryからS3へのデータ転送処理を試してみました。

AWS Glue Connector for Google BigQueryとは?

AWSのマーケットプレースで販売されている、AWS Glue用のコネクターです。

Amazon Web Service自身が販売しており、コネクター自体の利用料はかかりません。

(別途Glue/BigQuery等の料金はかかります)

面白そうなので試してみました。

事前準備(BigQuery側)

サービスアカウントの作成

BigQueryに接続するためのサービスアカウントを作成します。

GCPコンソールを利用し、「ビッグクエリ管理者」権限にて作成しました。

クレデンシャルファイルのダウンロード

サービスアカウントの作成後、クレデンシャルファイルをダウンロードします。

データの準備

Glueジョブから抽出するためのデータをBigQueryにロードしておきます。

サンプルデータにはVideo Game Sales (by Kaggle)を使いました。

「glue_connector_test」データセットに「vgsales」テーブルを作成し、データを登録します。

事前準備(AWS側)

クレデンシャルの登録

GCP側の事前準備で作成したクレデンシャルの情報をSecrets Managerに登録します。

マネジメントコンソールからAWS Secrets Managerの画面に遷移し、新しいシークレットを作成します。

この際、キーには「credentials」を指定し、値にはクレデンシャルファイルの中身をbase64エンコードした値を設定します。

$ base64 gcp-credential.json
ewoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....

IAMロールの作成

Glueジョブが利用するIAMロールを作成します。

「glue.amazonaws.com」と信頼関係を持つIAMロールを作成し、以下のマネージドポリシーを割り当てます。

  • AmazonS3FullAccess
  • AmazonEC2ContainerRegistryReadOnly
  • AWSGlueServiceRole
  • SecretsManagerReadWrite

S3バケットの作成

BigQueryから抽出したデータのアップロード先バケットを作成します。

「bigquery-glue-test」という名前で作成しました。

使ってみる

サブスクライブ

マーケットプレースの「AWS Glue Connector for Google BigQuery」にアクセスし、「Continue to Subscribe」を選択します。

許諾に同意し、数分待つとサブスクライブが完了します。

コネクター登録

サブスクライブが完了したら、「Continue to Configuretaion」を選択します。

使用するバージョンを選んだら「Launch Software」を選択します。

中央の「Usage Instractions」を選択し、ダイアログ内のリンクをクリックすることでAWS Glue Stduioのコネクター追加画面に遷移します。

コネクター名と、先程作成したシークレットを設定し作成します。

これでコネクターが登録できました。

ジョブの作成

BigQueryからデータを取得し、S3にアップロードするジョブをGlue Studioにて作成します。

Glue Studioのジョブ画面から、「Blank graph」を選択します。

「source」から「AWS Glue Connector for Google BigQuery」を選択し、プロパティを設定します。

「Connection」には、先程作成したコネクター名を設定し、「Connection options」には以下のようにデータを登録します。

Key Value
parentProject 接続先BigQueryの「プロジェクト名」
table 接続先BigQueryの「データセット名」.「テーブル名」

※:「AWS Glue Connector for Google BigQuery」は内部的にはspark-bigquery-connectorを利用しているようでした。そのため、optionの設定はspark-bigquery-connector#propertiesが参考になりました。

次に、「target」「S3」を選択し、プロパティには事前準備で作成したバケットを指定します。

最終的に、このようなジョブが作成されます。

右上の「Save」ボタンにて保存後、「Run」ボタンからジョブを動かします。

正常終了したら、S3バケットを確認してみましょう。

parquetファイルが作成されているのを確認できます。

試しに、ファイルの中身をS3 SELECTを使って覗いてみます。

BigQueryに登録したデータがアップロードされました!

まとめ

「AWS Glue Connector for Google BigQuery」を使うことで、BigQueryからS3にファイルを転送することができました。

このようなユースケースでの転送方法はいくつもありますが、Glue(Spark)を使ってデータを扱うことにより、 変換処理やGlueデータカタログへの登録が容易になるのではないかと感じました。

今回はBigQueryからデータを抽出したので、次回はBigQueryへロードするケースを試してみたいと思います。

参考