Help us understand the problem. What is going on with this article?

S3→BigQueryのデータ転送を、出来るだけラクにやる方法

概要

  • S3からBigQueryへデータを転送し、分析に使いたい
    • 出来るだけ手軽に・簡単に・3分くらいで実現したい
    • 分析基盤向けデータ統合サービス「trocco」を使って実現してみる

※MySQL→BigQueryのデータ統合は、こちらの記事にあります

troccoとは

https://trocco.io/lp/index.html

  • 分析基盤向けのデータ統合サービス
  • 分析に必要な様々なデータ(DB/ストレージ/SaaS/API)を、DWHに統合可能
  • DWH自体の管理機能や、運用保守サポート機能も豊富

用意するもの

  • S3接続情報(転送元テーブルへの読み取り権限が必要)
    • IAM UserのAWSクレデンシャル(AccessKeyとSecretKey)
  • BigQuery接続情報(転送先データセット・テーブルへの書き込み権限が必要)
    • JSON Key(例 {''private_key_id'': ''123456789'', ''private_key'': ''-----BEGIN PRIVATE KEY-----...'', ''client_email'': ''...''}
  • S3のセキュリティ設定
    • trocco18.182.232.211 13.231.52.164 3.113.216.138の3つのIPアドレスでS3に接続します
    • ポリシー等でIP制限等を行っている場合は、こちらのIPを許可しておいてください。
  • troccoの登録
    • 無料トライアルもやっているみたいなので、事前に申し込み・登録しておいてください!
    • 申込時に、この記事を見た旨を記載して頂ければご案内がスムーズです

1. 転送設定を作成する

1-1. 転送元・転送先を決定

トップページより、転送元にS3を、転送先にBigQueryを選択し、転送設定作成ボタンを押す
qiita_20191205_1.png

すると、以下のような画面になるかと思いますが、これが設定画面です。
わからないことは右下のチャットで、直接聞いたりSlackのサポートから問い合わせることが出来ます。
qiita_20191205_2.png

1-2. 接続設定を作成

転送設定の名前とメモを適当に入力したら、「転送元の設定」内の「接続情報を追加」ボタンを押します。
qiita_20191205_3.png

別タブで接続情報の新規作成画面が開きますので、予め準備した接続情報を入力して下さい。
qiita_20191205_4.png

再度転送設定画面に戻り、S3接続情報の「再読込」ボタンを押すと、作成した接続情報が選択できるかと思います。
qiita_20191205_5.png

このステップが若干面倒ではありますが、一度保存した設定は再利用したり、チーム内で共有することが出来ます。

1-3. 転送元の設定

下記のように入力していきます。
入力ファイル形式はJSON Lines/JSONPath/CSVの他、オプションでAvroも対応しているみたいです。
圧縮形式はGzipとBzip2に対応しており、自動で判定されます。Zipも対応中だとか。tarとかも要望すれば対応してくれるそうです。

また、差分転送機能もサポートしているので、例えばあるディレクトリ(パスプレフィックス)配下に、日次でファイルが増えていくような場合、増分のファイルだけを転送するようなユースケースでもお使いいただけます。
(その他の項目の詳しい内容はドキュメントページを参照してください)

今回はパス配下には1ファイルしか無いので、全件転送で次に進みます。
qiita_20191205_6.png

1-4. 転送先の設定

転送元と同じ要領で設定していきます。
データセットとテーブルは既存のものを使っても良いですし、新しい名前で入力した上で自動生成オプションを有効にすれば、自動で作成されます。
転送モードはappend(追記)replace(テーブル作り替え)などが選択可能で、いずれもトランザクション内で処理されるため、途中で処理が失敗したらロールバックされます。
少量のデータを定期的に転送する場合はreplaceを、大量データで増分のみを転送する場合はappendを選択すると良いかと思います。
qiita_07.png

また、入力した情報に誤りがないか、疎通確認や権限確認をすることが出来ます。
(転送元も同様に確認が出来ます)
qiita_08.png
この段階で疎通や権限が正しいことを確認できると、安心感がありますね。

2. プレビューを確認

転送元のデータがプレビューされます。列名や、自動推論されたデータ型が正しく判定されているか確認して下さい。
qiita_20191205_7.png

自動推論機能により、CSVの区切り文字(デリミタ)や文字エンコーディング等も自動で判定されます。
万が一誤っていたら、入力オプションから変更してください。
qiita_20191205_8.png

データのスキーマは自動で推論されますので、間違っていたら「データ設定」タブから修正することも出来ます。
また、BigQueryの分割テーブルなど、詳細な設定も「入力設定」や「出力設定」から行うことが出来ます。
qiita_10.png

また、ここでメールアドレスのマスキングや、Ruby ETLなども組めます。詳しくはこちらの記事で解説していますのでご参照ください。

3. 定期実行・Slack通知を設定

最後は定期実行のスケジューリングや、通知設定の入力画面です。
qiita_20191205_9.png

日次バッチだったら、以下のようなUIで、数クリックで設定可能です。
(最短1分間隔で転送可能)
qiita_12.png

地味に嬉しいのが、この通知設定。
当然ジョブが失敗したらSlack通知とかはできるんですが、よくある「データが0件でジョブが正常完了してしまった」みたいなのまで検知できるんです。
qiita_20191205_10.png

4. ジョブ実行

定期実行の他に、アドホックな実行も可能です。
下図の実行ボタンを押せば実行が始まります。
qiita_20191205_11.png

実行画面こんな感じです。ちなみにジョブ実行のたびに専用コンテナが立ち上がり、かつCPUやメモリの割当を動的に変更できるので、パフォーマンス要件が厳しい場合も大丈夫らしいです。
qiita_20191205_12.png

まとめ

  • troccoを使うことで、約3分ほどでデータの転送設定を作ることが出来ました
  • 昨今機会が急激に増えつつあるデータ転送を、より手軽に実現できました
  • 複雑な作業はほぼないので、エンジニアだけでなく、マーケター・ディレクターの方まで幅広く利用出来るかと思います

試してみたい場合は、無料トライアルを実施しているので、この機会にぜひ一度お試しください。
(申込時に、この記事を見た旨を記載して頂ければスムーズにご案内できます)

※1 今回はembulk-input-s3embulk-output-bigqueryのホスティング環境を利用

hiro_koba_jp
ゴルフエンジニア
primenumber_inc
ビッグデータ分析基盤向けデータ統合自動化サービス「 trocco」などを提供する、データエンジニアリングスタートアップ
https://primenumber.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away