Embulk を使って kintone から MySQL にデータをロード:CData JDBC kintone Driver
前回の記事では、シンプルなCSVファイルからMySQLへ、Embulkを使ってETL処理を実施しました。
今回は趣向を変えて、クラウドサービス kintone から MySQLにデータをロードしてみたいと思います。
対象データ
対象データは kintoneのテンプレートアプリである顧客リストを対象にしました。
こんな感じの項目がそろっています。そして、日本語カラム名というのがポイントですね。
DWHやBIを実施する上でも顧客マスタは必須のデータです。最近は何かとデータがクラウドに分散されているので、こういったアプローチを取りたい方は多いのではないかなと。
どうやって Kintone からデータを吸い上げる?
通常 kintone はAPIアクセスもしくはCSV連携でDWHなどにデータをロードするのが一般的かと思います。
CSVは言わずもがなですが、手動でCSVをダウンロードする必要があるため、常に最新のデータを分析したいユーザーにはひと手間多いです。
また、Embulk でもすでに公開されている Salesforce Plugin のように頑張って Plugin を書けば実現できますが、API をどのようにテーブルに咀嚼するか、ページングやフィルター処理はどうするか等、勘案することはかなり多いのですし、あまり手軽ではありません。(その点、SalesforceだとSOQLのようなクエリ言語があるので、案外親しみやすいかもしれません)
なので、今回は CData Software で公開している CData JDBC Kintone Driver を使って、この部分を解消します。
上記の図で示すように、Embulk ではJDBC Input Pluginが公開されているので、これをCData JDBC Kintone Driver と組み合わせて、データのロードを実現します。
CData Kintone JDBC のインストール
それでは実際にやってみましょう。
まず、以下のURLから CData Kintone JDBC Driver をダウンロードします。30日間のトライアルがあるので、それを使っても大丈夫です。
https://www.cdata.com/jp/drivers/kintone/jdbc/
ダウンロードしたZIPファイルを解答し、setup.jarを実行して、インストールします。
インストール後、「C:\Program Files\CData\CData JDBC Driver for kintone 2019J\lib」にドライバーのjarファイルが生成されます。ここのファイルパスを後ほど使います。
JDBC Input Plugin のインストール
次に、EmbulkとCData JDBC Driverをつなぎこむための、JDBC Input Plugin をインストールします。
https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-jdbc
embulk gem install embulk-input-jdbc
MySQL Output Plugin のインストール
前回のBlogでもインストールしていますが、念の為。
https://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-mysql
以下のコマンドでMySQLの Output Pluginがインストールできます。
embulk gem install embulk-output-mysql
configファイルの構成
最後にEmbulkのconfigファイルで、JDBC Inputの設定を記述します。
接続のための詳しい内容はこちらのオンラインヘルプでも確認できます。
kintone-mysql.yml というファイル名で作成しました。
in: type: jdbc driver_path: C:\Program Files\CData\CData JDBC Driver for kintone 2019J\lib\cdata.jdbc.kintone.jar driver_class: cdata.jdbc.kintone.KintoneDriver url: jdbc:kintone:URL=https://XXX.cybozu.com/;User=XXXXX;Password=XXXX; table: "顧客リスト" out: type: mysql host: localhost database: DatabaseName user: UserId password: UserPassword table: "顧客リスト" mode: insert
ポイントはJDBC URLですね。以下のように接続したいKintoneテナントのUserID・パスワード・URLを入力します。
kintoneの接続情報 | 設定項目 |
---|---|
ユーザID | User |
パスワード | Password |
kintoneのサブドメイン含むサイトURL | Url |
あとは、専用のクラス名と kintone JDBC Driverのファイルパスを指定すればOKです。
テーブル名では、取得したいアプリの名前を記述します。日本語のリスト名でも大丈夫です。
実行
これで準備完了です。あとは「embulk run」で実行するだけです。
embulk run kintone-mysql.yml
実行すると、途中 kintone のレコードをInsertしているのが見えますね。
実行後、MySQL Workbenchからテーブルを確認してみると、以下のようにデータが取得できました。
日本語のテーブル名・カラム名でテーブルが作成され、データが登録されていることが確認できますね。
補足
ちなみに、上記の例ではテーブル名を直接指定しましたが、以下のようにSQL Queryを書いてもいいです。
Where句で作成日や修正日を指定すれば、最新のデータだけを対象にすることも可能です。
in: type: jdbc driver_path: C:\Program Files\CData\CData JDBC Driver for kintone 2019J\lib\cdata.jdbc.kintone.jar driver_class: cdata.jdbc.kintone.KintoneDriver url: jdbc:kintone:URL=https://XXX.cybozu.com/;User=XXXXX;Password=XXXX; query: "SELECT [RecordId],[会社名],[部署名] FROM [顧客リスト] WHERE [RecordId] = 1" out: type: mysql host: localhost database: DatabaseName user: UserId password: UserPassword table: "顧客リスト" mode: insert
このあたりのサポートしているSQLはこちらのリファレンスをどうぞ。
MySQLへの登録はInsert以外にも、MergeやReplaceもあるので、上記のSQLと組み合わせて柔軟に移行できると思います。
https://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-mysql#modes
また、CData JDBC Driver は kintone以外にもなんだかいっぱいあります。私は次にTwitterを試してみようかと画策中です。