🚛
S3からBigQueryへのデータ転送方法所感メモ
モチベーション
- 所用のスポット集計でAWSのS3に吐かれたデータをBigQueryへ転送したい場面があった
- 「GCSを経由する方法しかしたことなかったけど、S3に直接アクセスできる方法あるっぽいし楽なのでは?」で試した所感をまとめておきたい
(実際の構築方法は全く同じ内容の記事やドキュメントが充実しているので省略し、感想ベースで書いています)
調査した方法
1. GCSを経由する
StorageTransferService(STS)を利用してS3からGCSに転送※し、GCSからBigQueryにLOAD DATA文や外部テーブルを利用してロードする方法
※ STSを使わずに gcloud storage sync
等を適当なマシンで実行でも良い
特徴・感想
- GCSへの転送が若干無駄手間感ある※
- AWSの認証はセキュリティキーの他にIAMロールも利用できる
- (試せていないが)CloudFrontが利用できるので大規模データ時に費用やパフォーマンス面で有利になりそう
※構築が多少手間だがSTSのイベントドリブン転送を利用すると、S3とGCSを同期できるのでオペ時の手間は削減可能
採用理由
他の2つが利用できなかったため
2. Amazon S3 BigQuery Omniを利用する
Amazon S3 BigQuery OmniでBigQuery上に外部接続を作成し、LOAD DATA文等でロードする方法
特徴・感想
- S3から直接BigQueryにロードできる
- AWSの認証はIAMロールによる認証のみ
- Bigquery Omniのリージョンに制限される
https://cloud.google.com/bigquery/docs/locations?hl=ja#omni-loc
不採用理由
データが吐き出されるS3がBigquery Omniのリージョン外だったため
3. BigQueryのデータ転送サービス(Data Transfer Service)を利用する
BigQueryのデータ転送サービスを利用する方法
特徴・感想
- S3から直接BigQueryにロードできる
- AWSの認証はセキュリティキーのみ
- BigQueryへのロードのオプションに制限がある(自動スキーマが設定できなかったり、圧縮の項目がなかったり)
https://cloud.google.com/bigquery/docs/s3-transfer?hl=ja#limitations - ロード先のテーブルを用意しておく必要がある
不採用理由
圧縮ファイルの対応と自動スキーマのオプションが対応していなかったため
感想
S3から直接読む方法はなんだかんだ何かしらの制約があり、GCSを経由する方法になりました。。
また、もしデータ基盤等の運用が必要なシステムで組み込むにしても、データ転送サービスのロードのオプションの制限やBigQuery Omniのリージョンの制限は結構引っかかるかもなあと思ったり。
Discussion