LoginSignup
10
10

More than 5 years have passed since last update.

EmbulkでMySQLのデータをBigQueryにロードするのに便利なツール

Last updated at Posted at 2016-03-26

はてなブログで書いた記事のQiita版です。
Qiitaでは比較的にEmbulk、BigQuery関連の投稿を見かけるので参考になればと思います。

Samidareを作成した経緯などは以下のリンク先を参照ください。ここでは機能・メリットと利用方法について記します。
EmbulkでMySQLのデータをBigQueryにロードするのに便利なツールの開発

Samidareの仕様・機能

  • Ruby製でgemとして提供されています
  • YAMLでMySQLのDB接続設定と対象テーブルを列挙するだけで実行できる
  • MySQLのテーブルスキーマを基にEmbulkの設定、BigQueryのテーブルスキーマを生成してくれる
  • 生成した設定をまとめて実行する(任意のテーブルのみ実行することも可能)
  • 実行時にBigQueryにテーブルを作成する(事前に作成する必要がない)
  • BigQueryへのロードの落とし穴を解決(tinyint変換、タイムゾーン問題)

細部の仕様、実行オプションなどは Samidare を参照ください。

事前準備

以下のEmbulkプラグインのインストールが必要です。

embulk gem install embulk-input-mysql
embulk gem install embulk-output-bigquery
embulk gem install embulk-parser-jsonl
embulk gem install embulk-formatter-jsonl

MySQLのDB接続設定(database.yml)

database.yml にMySQLのDB接続設定を記述します。
DB毎に任意の定義名を設定してください。以下のサンプルでは定義名として db01 を設定しています。

db01:
  host: localhost
  username: root
  password: pswd
  database: production
  bq_dataset: mysql_db01

ロード対象テーブルの設定(table.yml)

database.yml のDB定義名毎に対象テーブルを table.yml に設定します。
table.yml を変更したら、必ず generate_config を実行してEmbulkの設定、BigQueryのテーブルスキーマを再作成してください。

db01:
  tables:
    - name: users
    - name: events
    - name: hobbies

Samidareの実行

以下は Ruby のサンプルコードです。BigQueryの接続設定と設定の出力先をハッシュにして引数にしてください。 generate_configdatabase.ymltable.yml に変更がなければ実行する必要はありません。

require 'samidare'

bq_config = {
 'project_id' => 'BIGQUERY_PROJECT_ID',
 'service_email' => 'SERVICE_ACCOUNT_EMAIL',
 'key' => '/etc/embulk/bigquery.p12',
 'schema_dir' => '/var/tmp/embulk/schema',
 'config_dir' => '/var/tmp/embulk/config',
 'auth_method' => 'private_key'
}

client = Samidare::EmbulkClient.new
client.generate_config(bq_config) # Embulkの設定・BigQueryのテーブルスキーマの作成
process_status = client.run(bq_config) # Embulkの実行
exit 1 unless process_status
10
10
0

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
  3. You can use dark theme
What you can do with signing up
10
10