今回はmysqlのデータをbigqueryに流し込む方法
実行環境
CentOS6.5
今回使用するもの
今回はembulkを使用
TreasureDataの@frsyukiさんが作成されたデータ転送するツールで
inとoutを定義することでinputをcsvやmysqlにしたりoutputをredshiftやbigquery,Treasuredataにしたりできる。
めっちゃ便利!!
事前準備
テーブルのスキーマをjsonで定義する必要がある。
今回は下記のスキーマをもったデータベースがあるとする
項目名 | 型 |
---|---|
id | integer |
name | varchar(255) |
age | integer |
流すまで
embulkのインストール
スキーマのjsonを定義する
今のカラムからtypeは何を指定したら良いかはこちらを参照
schema.json
[
{
"name": "id",
"type": "INTEGER"
},
{
"name": "name",
"type": "STRING"
},
{
"name": "age",
"type": "INTEGER"
}
]
embulk実行用のyamlをかく
完成系から
yaml
in:
type: mysql
user: [databaseのユーザー名]
password: [databaseへのパスワード]
database: [database名]
table: [対象テーブル]
host: [host名]
select: "*"
out:
type: bigquery
auth_method: private_key
service_account_email: *****@*****.iam.gserviceaccount.com
p12_keyfile_path: ./*****.p12
path_prefix: /tmp
file_ext: .csv.gz
source_format: CSV
project: **********
dataset: *********
# 完了後にローカルファイルを削除
delete_from_local_when_job_end: 1
# bigquery側でのテーブル名
table: *******
# テーブルがない場合に自動で作成するか
auto_create_table: 1
# 先ほど作成したスキーマファイルのパス
schema_path: ./schema.json
formatter:
type: csv
header_line: false
timezone: Asia/Tokyo
encoders:
- {type: gzip}
RUN!!!!
console
embulk run ***.yml
yamlの解説
inに関しては問題ないと思う
だいたい分かると思う。
問題はoutのbigquery側の設定
ややこしかったものをピックアップした
service_account_email
公式ページには
Your Google service account email
こう書かれているので、****@gmail.comって書いたら怒られた。
どうやら権限ページのサービスアカウントで作成した際のメールアドレスである必要があるらしい。
project
公式ページには
project_id
ダッシュボード画面でのプロジェクトのID
dataset
bigqueryのページで作成するデータベースのようなもののID