この記事について
Embulkを活用して、MySQLのデータをBigQueryにロードする方法についてまとめた記事です
なぜBigQueryにデータをロードするのかといった部分についても触れています
Embulkとは?
様々な環境間に対応しているデーターローダーです
Embulk is a parallel bulk data loader that helps data transfer between various storages, databases, NoSQL and cloud services.
Embulkのリポジトリより引用
embulkのインストール
最新版のv0.9.21ではJava8が必要です
curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
pluginのインストール
今回使うinputとoutputのpluginもインストールします
embulk gem install embulk-input-mysql
embulk gem install embulk-output-bigquery
Embulkは前述の通り、様々なインプット/アウトプットに対応しています
実行したいインプット/アウトプットに対応したpluginをインストールしましょう!
他のpluginに関しては公式からご確認ください
設定ファイル
Embulkは設定ファイルをymlで記述します
また変数にも対応しており、その場合はliquidで記述し、ファイル名もconfig.yml.liquidとなります
設定例
in:
type: mysql
host: {{ env.DB_HOST }}
user: {{ env.DB_USER }}
password: {{env.DB_PASS}}
database: {{env.DB_DATABASE}}
table: posts
select: "id,title,body,created_at,updated_at"
out:
type: bigquery
location: {{env.BIG_QUERY_LOCATION}}
mode: replace
table: posts
auth_method: json_key
json_keyfile: {{env.GOOGLE_APPLICATION_CREDENTIALS}}
project: {{env.BIG_QUERY_PROJECT}}
dataset: {{env.BIG_QUERY_DATASET}}
compression: GZIP
auto_create_table: true
allow_quoted_newlines: true
設定項目の説明
in:select
どのデータを抽出し、ロードするか選択します
移行する必要のないデータはこのタイミングで除外しておきます
out:mode
5つのモードがあり、主要なのは append
と replace
の2つです
append
はデータを追記していくモード、
replace
はデータを書き換えしていくモード となります
out:auto_create_table
BigQuery側にテーブルが存在しない場合、自動で作成するモードです
スキーマの設定は3種類あります
- schema.json
- テンプレートテーブル
- Embulkからの推測
詳細はこちら
細かい設定について
その他の設定項目は下記からご確認ください
実行
embulk run {$設定ファイルパス}
これだけでローディングが完了します!
なぜやるのか?
BigQueryに集約することで権限管理の手間を減らす
DBに直接アクセスするような場合は分析用のアカウントをつくるケースが多いかと思いますが、
その場合は共通アカウントになってしまい、実際に誰が使えるのか不透明になってしまい、権限管理に手間が増えます
BigQueryはGCPのIAMで管理できるため、ユーザー単位の細かい権限管理も手間なく行えます
データポータル, スプレッドシートとの連携で可視化を簡単に
BigQueryはデータポータルとの連携もサポートしており、可視化、ダッシュボードの作成も容易です
データポータルからBigQueryへのアクセスも上記と同じ用にIAMで管理できるため手間がかかりません
G Suite の Business、Enterprise、Education プランであればスプレッドシートとの連携も容易で、利用の幅が広がります
FirebaseAnalyticsや他のデータとの連携した分析を可能にする
アプリのイベントデータをFirebaseAnalyticsで計測、収集している場合はサービス側のDBと照らし合わせて分析したいケースも多いかと思います
BigQuery上にデータを集めることで、JOINも可能になるので分析がはかどります
※ JOINを可能にするにはデータを同じロケーションに設定する必要があります