やったこと
- 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にデータを転送する