kintoneデータをCData ODBC Driverを使用して主要BIツールから接続するときのTips集

# はじめに

本記事では、kintoneのアプリ内データを、CData ODBC Drivers製品を使用して主要なBIツールから利用する場合にサポートセンターに多くお問い合わせ頂く内容を纏めました。CData ODBC Drivers製品のインストールおよび接続設定、および、各BIツールからの基本的な接続手順は以下のリンクからご覧いただけますでご確認ください。

- [kintone データをTableau でビジュアライズ by CData ODBC Drivers](https://qiita.com/jonathanh/items/517a76ac9e4b1879b75b)
- [kintone内のデータをODBCで繋いてQlikViewでレポーティング](https://qiita.com/kuwazzy/items/805358b99ecb80c1d8b7)
- [CData を使ってkintone アプリのデータをMicrosoft Power BI でビジュアライズ](https://developer.cybozu.io/hc/ja/articles/115001819006-CData-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6kintone-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92Microsoft-Power-BI-%E3%81%A7%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA)
- [kintoneを多様なツールでつなぐには？](https://www.slideshare.net/cdatajapan/kintone-81927275)

# Tips集

## どういう仕組みで動作しているの？

主要なBIツールには、RDBMSへ接続してSQLでクエリーするODBC/JDBCといったデータソースへの接続インタフェースを持っています。[CData kintone ODBC Driver](http://www.cdata.com/jp/drivers/kintone/odbc/)は、ODBC規格でkintoneにアクセス出来るデータ接続ライブラリです。BIツールからアドホックに本ODBCドライバを呼び出すことでkintone内の最新のデータをBIツールで表示することが出来るようになります。BIツールからSQL(SELECT文)で呼ばれると、 CData kintone ODBC Driverは、SQLをkintoneのREST APIにパース（変換）して、kintoneのREST APIの以下のエンドポイントに対してGetメソッドでHTTPリクエストしています。レスポンスはJSONデータで戻ってきますので、JSONをBIツールで二次元表として扱えるようにRecordsetとして変換してBIツールに渡します。

- メターデータ（アプリ、および、データ項目の一覧および属性）の取得
 - [kintone developer network - アプリ情報の取得](https://developer.cybozu.io/hc/ja/articles/202931674)
- データの取得
 - [kintone developer network - レコードの取得（GET）](https://developer.cybozu.io/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/0b322b22-ad78-dbc4-668e-ae05871080b0.png)


## レコード取得時の制限は？

kintoneのREST APIは、一度に取得出来るレコード数は500までという制約があります。 CData kintone Driverでは、本API制約をユーザが意識しなくてもよいように、500件以上のデータの取得リクエストがあった場合には、内部的に500件ずつFetchする仕組みが組み込まれていますので一度のユーザリクエスト操作で500件以上のレコードを取得することが出来ます。

## 認証は？

kintone REST APIのパスワード認証を利用しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/bd18f501-2046-9059-f40c-62527d0905ad.png)
[kintone developer network - kintone REST APIの共通仕様](https://developer.cybozu.io/hc/ja/articles/201941754#step7)



APIトークン認証、および、セッション認証は対応していません。kintoneのAPIトークンは、アプリ毎に発行されるので、一つのAPIトークンで複数のアプリにアクセスすることは出来ません。もし、ご利用されたい方がいらっしゃいましたら[こちらのフォーム](http://www.cdata.com/jp/forms/request/)から機能要求リクエストください。

## セキュアアクセスは？

Basic認証、および、クライアント証明書に対応しています。

### Basic認証

ODBCのDSNの「Authentication」内の以下の項目を設定ください。

- Basic Auth User : Basic認証のユーザID
- Basic Auth Password : Basic認証のパスワード

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/29732d6b-90a8-c908-fdfd-6dc7d77885c6.png)

### クライアント証明書

ODBCのDSNの「SSL」Authentication内の以下の項目を設定ください。

- SSL Client Cert : .pfxファイルのパスを指定
- SSL Client Cert　Password : .pfxファイルのパスワード
- SSL Client Cert　　Subject : 「*」
- SSL Client Cert　　Type : 「PFXFILE」

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/413257a2-08e7-7a54-13e5-0b31f2a2748e.png)

## 社外ネットワークにアクセスするのにプロキシサーバ経由が必要

デフォルトではWindowsOS内（ブラウザ設定から設定可能で値はレジストリに保持されている）のプロキシ設定値を利用する設定となっています。マニュアルで変更したい場合は、ODBCのDSNの「Proxy」内の「Proxy Auto Ditect」を「False」に変更して、「Proxy Server」および認証が必要であれば関連項目を設定ください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/5ff9db89-15ad-8fce-0be5-83d4e7d26126.png)

[CData製品マニュアル - Proxy Auto Detect](http://cdn.cdata.com/help/LKC/odbc/RSBKintone_p_ProxyAutoDetect.htm)


## サブテーブルってどうなるの？

「アプリ名_サブテーブル名」として別テーブルとして扱えます。以下、Tableauでのテーブル一覧の例です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/dde29ca7-b690-bc0c-55e1-c6550b57834a.png)

親テーブルとは、１対多のカーディナリティとなりますので、次節のように親テーブルとのテーブル（アプリ本体）とのテーブル結合も可能です。


## アプリ（テーブル）間の結合

結構驚かれることが多いのですが全てのアプリ（テーブル）間のJOINが可能です。内部結合、外部結合に加えてUNIONも利用出来ます。

Tableau Desctopでのテーブル結合の定義

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/58287a6c-8a71-3ff0-3536-efe517308a13.png)

生成されたSQL

```sql
SELECT "案件情報 (Kintone.案件情報)"."AppId" AS "AppId",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."AppId" AS "AppId__X_________",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."Id" AS "Id",
  "案件情報 (Kintone.案件情報)"."RecordId" AS "RecordId",
  "案件情報 (Kintone.案件情報)"."Revision" AS "Revision",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."Revision" AS "Revision__X_________",
  "案件情報 (Kintone.案件情報)"."詳細" AS "X_",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."資料Aggregate" AS "X_Aggregate",
  "案件情報 (Kintone.案件情報)"."顧客名" AS "X__",
  "案件情報 (Kintone.案件情報)"."部署名" AS "X__1",
  "案件情報 (Kintone.案件情報)"."案件名" AS "X__2",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."商談日" AS "X__3",
  "案件情報 (Kintone.案件情報)"."受注確度" AS "X___",
  "案件情報 (Kintone.案件情報)"."受注金額" AS "X___1",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."商談内容" AS "X___2",
  "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."案件情報Id" AS "X___Id",
  "案件情報 (Kintone.案件情報)"."ご担当者名" AS "X____",
  "案件情報 (Kintone.案件情報)"."受注予定日" AS "X____1",
  "案件情報 (Kintone.案件情報)"."営業担当者Aggregate" AS "X____Aggregate"
FROM "Kintone"."案件情報" "案件情報 (Kintone.案件情報)"
  LEFT JOIN "Kintone"."案件情報_商談履歴" "案件情報_商談履歴 (Kintone.案件情報_商談履歴)" ON ("案件情報 (Kintone.案件情報)"."RecordId" = "案件情報_商談履歴 (Kintone.案件情報_商談履歴)"."案件情報Id")
```

## どんなSQLが書けるの？

ANSIの規格SQL-92レベルをサポートしています。JOINに加えてWHERE句によるレコードの絞り込み、ORDER BYのソート、GROUP BYによる集約といった基本的な集合理論の操作に加えて、文字列・数値・日時関数が揃っています。詳しい構文規約は下記の製品マニュアルをご覧ください。

[CData ODBC Driver for kintone 2017J 製品マニュアル - SELECT ステートメント](http://cdn.cdata.com/help/LKC/odbc/pg_select.htm)

## レコードの添付ファイルは？

CData ODBC Driver for kintone自体は、ストアドプロシージャで添付ファイルのアップロード、および、ダウンロードが可能です。

- [ CData製品マニュアル - ファイルダウンロード](http://cdn.cdata.com/help/LKC/odbc/pg_sp-downloadfile.htm)
- [ CData製品マニュアル - ファイルアップロード](http://cdn.cdata.com/help/LKC/odbc/pg_sp-uploadfile.htm)

kintoneのWebAPI的には下記のAPIを利用しています。

- [kintone developer network - ファイルアップロード](https://developer.cybozu.io/hc/ja/articles/201941824)
- [kintone developer network - ファイルダウンロードで必須となる2つの手順](https://developer.cybozu.io/hc/ja/articles/200814380)

一般的なBIツールの標準機能だと上記のストアドプロシージャを呼び出すのは難しいです。 別途、ストアドプロシージャを呼び出せるツールやプログラムが必要で連携する必要があります。

## Mac版は？

上記でご紹介しているBIツールの中ではTableauDesktopはMacOS版があります。2017/9にリリースされた[TableauDesktop10.4](https://www.tableau.com/support/releases/desktop/10.4)では、Mac版にODBC接続が追加されました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/dffe7dc3-0bee-0226-7196-46f89ee63ef0.png)

[Tableau Desctop Help - Other Databases (ODBC)](http://onlinehelp.tableau.com/v10.4/pro/desktop/en-us/examples_otherdatabases.html)

CData Software（US本社）では、2017/10に90を超えるデータソース向けのMac版ODBCDriverをリリースしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/469471f4-3c58-ae4e-119b-937799ff2012.png)
[CData Software Blog - ODBC Drivers for Mac and Linux Released](https://www.cdata.com/blog/news/20171128-mac-linux-released)

現在(2017/12)、CData Software Japanにて、kintone版含む日本語版のリリースの準備をしています。準備が出来ましたら、別途Qiita記事にまとめます。

# まとめ

kintoneは、業務ユーザでもアプリをノンプログラミングで作成してデータを一元管理できる便利なサービスです。このkintoneに入っているデータは企業にとって宝の山ですのでBIツールなどからkintone内のデータを分析するニーズは弊社サポートにも多くお問い合わせいただくことも多いです。CData ODBC Driver for kintoneは３０日間の無償評価版もございますので是非[こちらのサイト](http://www.cdata.com/jp/drivers/kintone/odbc/)からダウンロードしてお試しください。