Amazon S3 から BigQuery へデータ転送

Amazon S3 から BigQuery へデータ転送する方法をご紹介します。

Google Big Query

背景 AWS メインで DHW だけ BigQuery を利用したい

AWS メインで DHW だけ BigQuery を利用したいというのが背景でして、Amazon S3 から BigQuery へデータ転送するまでの実装で参考になった情報をご紹介します。

Amazon S3 → BigQuery データ転送の参考記事

まず、S3 から BigQuery へ CSV ファイルを転送して table へ読み込むまでのフローを動かしてみたいなら、BigQuery Data Transfer Service で AWS S3 から BigQuery に CSV データをロードしてみた | DevelopersIO の記事を参考にすれば動くところまではすぐ実装できます。

併せて、公式ドキュメント Amazon S3 転送  |  BigQuery Data Transfer Service  |  Google Cloud も一読しておくと良いでしょう。

Amazon S3 → BigQuery データ転送ナレッジ

「オンデマンド」はリアルタイム性は担保できない

Amazon S3 データ転送の設定 「オンデマンド」 は、いつ実行されるか不明なのでリアルタイム性は担保できないと思っていた方が良いです。

ワイルドカード * 終わりでは転送されないので、拡張子まで指定する

プレフィックス マッチングまたはワイルドカード マッチングの影響

Amazon S3 API では、プレフィックス マッチングはサポートされていますが、ワイルドカード マッチングはサポートされていません。プレフィックスに一致するすべての Amazon S3 ファイルは Google Cloud に転送されます。ただし、実際に BigQuery に読み込まれるのは、転送構成の Amazon S3 URI に一致するファイルのみです。

s3://your_bucket/your_folder/*

という風にワイルドカード * では S3 にあるファイルは転送されないので、

s3://your_bucket/your_folder/*.avro

のようにワイルドカードに加えて拡張子 .avro を明示的に指定する必要がありました。

[ファイル形式] Avro 推奨

[ファイル形式] で、データ形式を選択します。JSON(改行区切り)、CSV、Avro、Parquet、ORC のいずれかを選択できます。

DATE, TIMESTAMP, DATETIME のフォーマット要チェック

時間単位列パーティショニング
テーブルのパーティションは、テーブルの DATE、TIMESTAMP または DATETIME 列で分割できます。テーブルにデータを書き込むと、BigQuery は列の値に基づいて、自動的に正しいパーティションにデータを入力します。

引用元: 時間単位列パーティショニング - パーティション分割テーブルの概要  |  BigQuery  |  Google Cloud

  • データソース中に↑の日付情報のプロパティが必ず存在すること
  • DATE, TIMESTAMP, DATETIME の形式が、BigQuery がサポートしている形式であること

以上、Amazon S3 から BigQuery へデータ転送したい、現場からお送りしました。