はてなブログで書いた記事の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_config
は database.yml
と table.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