LoginSignup
14
14

More than 5 years have passed since last update.

mysqlで集計頑張るのやめてbigqueryにいかない?

Posted at

今回は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

後の細かな設定は公式ページで

14
14
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
14
14