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

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

この記事について

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に関しては公式からご確認ください

https://plugins.embulk.org/

設定ファイル

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を可能にするにはデータを同じロケーションに設定する必要があります

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした