2019 kintone advent calendar2の6日目の記事です。
embulk-input-kintone を作った話です。
Background
- 小売で、業務システムをkintoneに乗せて運用している。POSはスマレジを使っている。
- kintoneはカラムの変更がしやすいので、分析したい切り口があればデータが追加しやすいので、商品のマスターにkintoneのデータを使用し、売上のデータはスマレジから取り出したデータを結合して使っている。
- 分析を効率良くやるために、データを一箇所で集めなければならない。
- DWHにはBigQuery(BQ)を使用
- 一番最初は、cli-kintone をCSVにするscriptを実行後、embulkを使ってBQにデータを入れていた
- kintoneのアプリが増えるとscriptnのメンテが大変、もっと宣言的に書きたい
-
- 高校のクラスメイトの縁あって、embulkを使ったサービスを手伝うことにもなった。
-
ということで、kintoneのinputがなかったので作りました。
https://github.com/trocco-io/embulk-input-kintone
embulkとは
バルク処理に特化したplugableのデータローダーです。
クラウドサービス(e.g. s3, sales force), DB(e.g. MySQL, Postgres, SQL Server), ローカルファイル(e.g CSV, JSON) etc からクラウドサービス, DB, ローカルファイルetcにデータを転送(ETL)できるOSSです。
詳しくは下記のリンクを御覧ください。
参考
http://frsyuki.hatenablog.com/entry/2015/02/16/080150
https://qiita.com/hiroysato/items/da45e52fb79c39547f69
使い方
embulk gem install embulk-input-kintone
設定のかんたんな解説
in:
type: kintone
domain: example.cybozu.com # ドメインを指定
username: user # ユーザー名
password: password # パスワード この他にもアプリトークンでの認証も対応してます。
app_id: 1 # アプリ id
fields: # 抽出したいフィールドのフィールドコードと、データタイプを記述
- {name: $id, type: long}
- {name: $revision, type: long}
- {name: foo, type: string}
- {name: bar, type: long}
- {name: baz, type: double}
out:
type: stdout # BigQuery, Redshift, MySQLもプラグインをインスールすれば可能
現実装の制限 20191205時点
- カーソルを使ったデータを取得しているので、カーソルの制限を受ける
- 同時に作れるカーソルは1ドメインあたり10個まで
- 一度に取得できるのは10万件まで
- カーソルの有効期限は、カーソルの作成 または カーソルからレコードを取得 による最終リクエスト時刻から10分です。
- カーソルの作成にかけられる時間は5分間です。それ以降はタイムアウトします。
- embulkのguessを実装してないので、最初の設定に時間がかかる(将来、対応予定
- サブテーブルのに対応してない(将来、対応予定
Embulkを使ったデータ転送の今後
embulkのフローを開発と本番で分けるのに環境変数をliquid templateつかって切り分けているが、数が増えると管理がめんどくさい。運用は泥臭いので、今後としては
- digdagや、airflowを使って自前で構築
- troccoのようなSaaSを使用