AWS AppflowでBigQueryからS3にparquet出力

やったこと

  • AWS AppflowのBigQuery connectorを使ってBigQueryからS3にデータを出力
  • 出力時はparquet形式
  • Glue Crawlerでtableを作るとどんなデータ型になるか調査

まとめ

  • 問題なくS3にparquetで出力できた
  • ネストしたデータ(BigQueryのRECORD型)でも問題なく出力できが、Glueのtableではstring型になる

作業

ひとまずBigQueryにテーブルを準備し、データを登録しました

GCPのClient secret生成& Appflowに設定

AWSのマネージメントコンソールからAppflowの設定を進めていたところ、Connectionsの作成で下記のエラーが発生しました

Couldn't authenticate with Google BigQuery
Client missing a project id.

GCP側で認証情報を発行する必要があるため、GCPのAPIとサービス画面からOAuth 2.0クライアントIDの生成をします

そしてjsonをダウンロード



(AWSのマネージメントコンソールに戻り)Appflow –> Connections –> エラーが発生するconnectionを編集
ダウンロードしたjsonに記載されているClient IDと Client secretを貼り付けて保存

キャプチャの「Save changes」を押下すると、GCPの認証画面が開くので「続行」をして承認する

flow作成

作成成功

flow実行, Glue Crawler実行

正常終了しS3にparquetファイルが出力されていることを確認しました
(色々詳細は省きますが)その後Crawlerを実行しtableを作成するところまで完了

Athenaから確認

データ型はバラついたイメージ

  • event_timestampはBigQueryではINTEGERで定義されているが、Glue Tableではstring
  • event_paramsはBigQueryでRECORD型だが、Glueではstring

Athenaから見たデータはこんな感じ

備考

Appflowのconnections作成時に下記のエラーが発生しました

Invalid Parquet schema: Illegal character in destination field name Search Keywords

ボクの場合BigQueryのテーブルに設定したカラム名に半角スペースが含まれていることが原因だったようです
あんまり遭遇するケースではないと思いますが、どなたかの助けになれば…

感想

別サイトを確認したところネストされているデータ型は以前までparquet出力できないようだったのですが、2024/7時点では問題なく出力できるようです

しかしRECORD型がstringになっていると厄介になるケースが多そうに感じました(stringデータをstruct型に補正する処理が必要かも、と)

AppflowのBigQuery Connectorに関してサイトを漁ってみたけど、あんまり事業利用されていないのかな、という印象を持ちました

助けてもらった参考サイト

Amazon AppFlow の BigQuery コネクタを試す

Youtube Amazon AppFlow BigQuery connector | Amazon Web Services

Amazon AppFlowでBigQuery→S3にデータを転送する