LoginSignup
0

More than 3 years have passed since last update.

Embulkを活用して、MySQLのデータをBigQueryにロードする

Last updated at Posted at 2019-12-06

この記事について

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つのモードがあり、主要なのは appendreplace の2つです

append はデータを追記していくモード、

replace はデータを書き換えしていくモード となります

out:auto_create_table

BigQuery側にテーブルが存在しない場合、自動で作成するモードです

スキーマの設定は3種類あります

  • schema.json
  • テンプレートテーブル
  • Embulkからの推測

詳細はこちら

細かい設定について

その他の設定項目は下記からご確認ください

embulk-input-mysql

embulk-output-bigquery

実行

embulk run {$設定ファイルパス}

これだけでローディングが完了します!

なぜやるのか?

BigQueryに集約することで権限管理の手間を減らす

DBに直接アクセスするような場合は分析用のアカウントをつくるケースが多いかと思いますが、

その場合は共通アカウントになってしまい、実際に誰が使えるのか不透明になってしまい、権限管理に手間が増えます

BigQueryはGCPのIAMで管理できるため、ユーザー単位の細かい権限管理も手間なく行えます

データポータル, スプレッドシートとの連携で可視化を簡単に

BigQueryはデータポータルとの連携もサポートしており、可視化、ダッシュボードの作成も容易です

データポータルからBigQueryへのアクセスも上記と同じ用にIAMで管理できるため手間がかかりません

G Suite の Business、Enterprise、Education プランであればスプレッドシートとの連携も容易で、利用の幅が広がります

FirebaseAnalyticsや他のデータとの連携した分析を可能にする

アプリのイベントデータをFirebaseAnalyticsで計測、収集している場合はサービス側のDBと照らし合わせて分析したいケースも多いかと思います

BigQuery上にデータを集めることで、JOINも可能になるので分析がはかどります

※ JOINを可能にするにはデータを同じロケーションに設定する必要があります

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0