こんにちは。CData Software Japan リードエンジニアの杉本です。
今回はCData JDBC Driver の基本的な使い方、DbVisualizer を使ってデータを取得したり、更新したりする方法を解説します。
CData JDBC Driver とは?
CData JDBC Driver はSalesforceやKintoneといった SaaS、NoSQL、ビッグデータ連携用のJDBC API ライブラリです。
DbVisualizer や DataSpider、Tableau など多様なツールから利用可能となっており、各Web APIの仕様の違いを意識することなく、 SQLでデータの操作を可能にします。
https://www.cdata.com/jp/jdbc/
本記事ではCData JDBC Driver for SharePoint を例として、DbVisualizer からの利用方法、機能について解説します。
なお予め対象の環境にはJDK とDbVisualizer をインストールしておいてください。
利用するSharePoint Site のリスト
今回はSharePointのリストテンプレートで作成できる「案件管理」を対象として操作します。
CData JDBC Driver のインストール方法
まず対象となるJDBC Driver をインストールします。以下のリンクからトライアルのダウンロードを行ってください。
https://www.cdata.com/jp/drivers/sharepoint/jdbc/
JDBC Driver はWindows版・Cross-Platform版、Mac版が存在しますが、インストーラーが分かれているだけ実際のライブラリは変わりありません。利用しているマシンに応じてダウンロードしてください。
なお、今回はWindows版を利用しました。
以下のようにインストーラーを使ってセットアップを進めます。
インストールが完了すると以下のように「C:\Program Files\CData\CData JDBC Driver for SharePoint 2021J」のフォルダに各種JDBC のライブラリが格納されます。
接続文字列の作成および接続テスト
CData JDBC Driver は以下のドキュメントにあるように、専用のクラス名と接続文字列を使って接続を構成します。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_JDBCconnectcode.htm
ただ、この接続プロパティは多様に存在するので手動で組み立てるのは大変です。そこで、CData JDBC Driverの標準機能に含まれる接続文字列ビルダーを使って構成しましょう。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_jdbcconnstring.htm
コマンドラインから「java -jar cdata.jdbc.sharepoint.jar」で接続文字列ビルダーを起動できます。
今回はSharePoint Online に対してREST APIで接続するため、以下のようにプロパティ指定を行いました。
プロパティ
|
値
|
備考
|
AuthScheme
|
OAuth
|
|
URL
|
例)https://cdatahandson01.sharepoint.com/sites/SampleSite
|
接続対象のSharePoint Siteを指定してください。
|
SharePoint Edition
|
SharePoint Online
|
|
Initiate OAuth
|
GETANDREFRESH
|
OAuth Access Tokenの管理方式を指定します。
|
Schema
|
REST
|
|
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_connectionj.htm#sharepoint-online-%E3%81%B8%E3%81%AE%E8%AA%8D%E8%A8%BC
入力後、「接続テスト」ボタンをクリックすると以下のようにブラウザが立ち上がり、認証・認可のプロセスが開始されます。
以下のようにアクセス許可の内容を確認して、「承諾」をクリックしましょう。
以下のようにメッセージが表示されれば接続成功です。
なお、SharePoint REST API接続の認証に利用されるAccess Tokenは以下のフォルダに保存され、CData JDBC Driverが接続の度に Access Tokenの有効期限を確認しながら、自動で更新を行います。
「%APPDATA%\CData\SharePoint Data Provider」
接続が完了したら、以下の接続文字列をコピーして保存しておきましょう。
DbVizualizer の起動・設定
CData JDBC Driver は通常以下のドキュメントにあるように、Java コードからSQL文などを実行します。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_JDBCqueries.htm
とはいえ、クエリの検証や接続テストを行う場合は、DbVisualizerを使うのがおすすめですので、今回はDbVisualizer を使ってCData JDBC Driver を通じてどんなクエリが実行できるのか確認していきましょう。
まず、DbVisualizer を立ち上げて「Driver Manager」からCData JDBC Driver の登録を行います。
「+」ボタンで任意のDriver Nameを追加し、参照設定となる「フォルダ」アイコンを開きます。
「C:\Program Files\CData\CData JDBC Driver for SharePoint 2021J\lib」に移動し、「cdata.jdbc.sharepoint.jar」を開きましょう。
以下のように追加が完了したら閉じるボタンをクリックします。
コネクション構成
Driver の追加が完了したらDatabase Connection を追加します。
「Create New Database Connection」をクリックし、No Wizardモードで接続を行っていきます。
Database Type は「Auto(Generic)」のまま先程登録したSharePoint のJDBC Driverを選択しましょう。
併せてDatabase URLの項目に接続テストツールで作成した接続文字列を指定することで接続が完了します。
接続が完了すると、以下のようにナビゲーションのところで、CData JDBC Driverが利用できるテーブルやビューを確認できます。
SQLの記述は「File」→「New SQL Commander」より行えます。
テーブル一覧の取得
それでは実際にSharePoint へのクエリを試していきましょう。
CData SharePoint JDBC Driver ではすべてのAPIのデータに対してSQLでアクセスできるようになっています。また、併せて各APIを独自にデータモデル化し、テーブル・ビュー・ストアドプロシージャの形式で利用できるようにしています。
とはいえ、まずそれぞれのAPIで利用できるテーブルやカラムを特定しなければいけません。通常のWeb APIであれば、そのAPIの仕様書をドキュメントやSwagger・OpenAPIといった外部仕様で確認しなければいけませんが、CData JDBC Driver では Metadata を検出する機能がサポートされています。
例えば、テーブル・ビューの一覧であれば、以下のように「sys_tables」というテーブルをクエリするだけで取得することができます。
https://cdn.cdata.com/help/RFG/jp/py/pg_table-systables.htm
SELECT TableName,TableType FROM sys_tables;
なお、この処理はJDBC APIのgetMetaData メソッドでも同様に取得できます。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_systemtablesj.htm
なお、CData SharePoint JDBC Driver はSharePoint 上に存在しているカスタムリストやドキュメントライブラリを自動的に検出し、テーブルとして表現します。
テーブルのカラム一覧の取得
テーブルを取得したらそのテーブルに関連するカラムも取得してみましょう。カラムの取得には「sys_tablecolumns」テーブルを利用できます。
https://cdn.cdata.com/help/RFG/jp/py/pg_table-systablecolumns.htm
SELECT * FROM sys_tablecolumns WHERE TableName='案件管理'
各APIではオブジェクトの型などが厳密に定義されていない場合が多いですが、CDataではそれらも事前に定義し、ユーザーが集計処理や日付のフィルターなどが扱いやすいように提供することも大きな特徴となっています。
データのクエリ
テーブル名とカラム名の特定ができたら、実際にデータを取得してみましょう。今回はSQLを手打ちで組み立てますが、事前にテーブル名とカラム名を特定できれいれば、動的にクエリを組み立てるようなUIを構成することも可能でしょう。
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理]
ちなみに、CData JDBC Driver はフィルター条件や集計クエリなども柔軟に実施することが可能です。例えば従業員数1000名以上のデータを取得したい場合、以下のようにクエリすることが可能です。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_select.htm
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理] WHERE Priority = '重要';
GROUP BYやSUMを用いた集計クエリやJOINなども可能です。
SELECT Priority, COUNT(ID) FROM [案件管理] GROUP BY Priority;
なお、CData JDBC Driver はSQL をAPI のリクエストに変換してデータを取得、結果を表形式で返します。もしAPIのサポートを超える範囲のSQLが実行された場合は、一度APIから全データを取得し、インメモリによるクライアントサイド側で処理するようになっています。
https://cdn.cdata.com/help/RSG/jp/jdbc/RSBSharePoint_p_SupportEnhancedSQL.htm
データの作成・更新
続いてデータの作成・更新・削除を行ってみましょう。CData JDBC Driver では通常のRDBと同じようにINSERT・UPDATE・DELETE文を用いてそれぞれのデータの処理を行うことができます。
例えば、データの作成処理は以下のようになります。
INSERT INTO [案件管理](Title,Status,Priority)VALUES('Sample Ticket','進行中','重要');
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理];
UPDATEも同様です。登録したデータの従業員数を変更してみましょう。
UPDATE [案件管理] SET Title = 'Update Title' WHERE ID = 6;
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理];
最後に削除です。
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理];
DELETE FROM [案件管理] WHERE ID = 6;
SELECT ID, Title, Status, Priority,DateReported FROM [案件管理];
APIによっては、削除するために特定のIDを指定する必要もあります。詳しい操作方法はデータソース・テーブル毎の各ドキュメントを参照ください。
ストアドプロシージャの実行
最後にストアドプロシージャの実行方法について解説します。
CData JDBC Driver ではテーブル・ビューのデザインにフィットしない、例えばバージョン情報の取得や添付ファイルのアップロード・ダウンロードといった特殊なAPIロジックをストアドプロシージャとして提供しています。
例えばSharePoint にファイルをアップロードしたい場合は、以下のようにストアドプロシージャを実行します。
https://cdn.cdata.com/help/RSG/jp/jdbc/pg_restsp-addattachment.htm
EXECUTE AddAttachment ListTitle = '案件管理', ItemId = 1,
FileName = 'favicon.ico', InputFilePath = 'C:\\Program Files\\CData\\CData JDBC Driver for SharePoint 2021J\\help\\favicon.ico';
これでSharePoint の画面を以下のようにファイルがアップロードされていることがわかります。
他のデータソースについて
ここまでSalesforce をベースに紹介してきましたが、このアプローチで他のクラウドサービス、例えばKintone や Smaregi などがすべて同じようにSQLでクエリ、データの更新などが可能です。
【スマレジのクエリ例】
jdbc:smaregi:ContractId=mycontractid;AccessToken=myaccesstoken;
SELECT CustomerId, FirstName, LastName FROM Customers LIMIT 10;
【kintoneのクエリ例】
jdbc:kintone:User=XXXXX;Password=XXXXX;URL=https://XXXXXX.cybozu.com/;
SELECT [顧客名], [メールアドレス] FROM [顧客管理(営業支援パック)] LIMIT 10;
おわりに
このようにCData JDBC Driver を利用することで、各種クラウドサービスのデータを手軽に取得して、Java で処理することが可能になります。
実際に触っていて、わからない部分、気になる部分があれば、お気軽にテクニカルサポートまでお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ