こんにちは。CData Software Japanリードエンジニアの杉本です。
CData Driver 最新バージョンであるV20では、新しい機能として「カスタムビュー」が追加されました。
今回はこの機能を紹介していきたいと思います。
カスタムビューとは?
ユーザー独自のビューを登録して、BIツールやETLツールから簡単に呼び出すことができるようになる機能です!
CData Driverはデータベースのサービスでは無いため、基本的には各データソースごとで事前定義されたテーブルもしくはビューをクエリするしかありませんでした。
もちろん、JOIN句やWHERE句なども利用できますが、あらためてSQLを都度書かなければいけないところが少し面倒でしたが、このカスタムビューの機能によって予めよく使うSQLを登録しておき、各種ツールから一発でクエリできるようになりました。
なお、この機能は全ドライバー共通の機能です。
使い方
使い方は2パターンあります。
ODBC・Power BI Connector の場合
ODBCの場合は、DSN画面から作成することができます。
対象のDSNの構成画面(今回はAmazon Marketplace Driverを選びました)を開き
テーブルタブから「テーブルまたはビュー」のリストを開いて、「Define New View」を選択します。
あとはビューの名前とSQLを登録するだけです。
Amazon Marketplace Driverでは商品の一覧が取得できますが、APIの制約上必ずIDを指定する必要があるので、自分の出品している商品のIDを予め設定したビューを登録してみました。
以上で登録できました。
あとはPower BIやTableauなどのツールから接続する時に、UserViewsというところから選択するだけになります。楽ちんですね・・・!
なお、設定はLocationフォルダに構成されます。
http://cdn.cdata.com/help/ONF/jp/jdbc/RSBAmazonMarketplace_p_Location.htm
JDBCやADO.NET、Excel Add-in 等の場合
接続プロパティのLocationで定義した場所に「UserDefinedViews.json」というファイルを作成して利用できるようにします。ODBCでも最終的にはこれと同じことが内部で行われています。
http://cdn.cdata.com/help/ONF/jp/jdbc/RSBAmazonMarketplace_p_Location.htm
以下のようにファイルを作成し
下記のようなJSON を定義することで利用できます。
{ "AllOrderItems":{ "query":"SELECT * FROM [OrderItems] WHERE [AmazonOrderId] IN (SELECT [AmazonOrderId] FROM [Orders] LIMIT 5 OFFSET 0)" }, "MyProducts":{ "query":"SELECT * FROM [Products] WHERE ([IdList] IN ('15700', 'S43')) AND ([IdType] = 'SellerSKU')" } }
どんなところで使えるの?
前述の通り、よく使うJOIN句やWHERE句を交えたものを定義しておくのが基本ですが、CData Driverの特性を考えると実は色んな用途があります。
CData Driverは様々なAPIをSQLベースで利用できるようになるコンポーネントですが、API側に存在している制約をすべて飲み込めるわけではありません。
例えば、CData Slack Driverでメッセージの一覧を取得したい場合、
通常であれば
SELECT * FROM Messages;
というようにクエリしたいところですが、Slack の API仕様上、以下のようにChannelIdを明示的に指定しなければいけません。
SELECT * FROM Messages WHERE ChannelId = 'D71R6CSR1' ;
この回避策として、以下のようなクエリで全チャネル横断取得ができますが、BIツールなどでは別途指定する箇所が増えて、二度手間感がありました。
SELECT * FROM Messages WHERE ChannelId IN (SELECT ChannelId FROM Channels) ;
それをカスタムビューとして登録しておくことで、一発で様々なツールから呼び出せるようになりました。
前述のAmazon Marketplaceも同様です。APIの制約上Idの指定が必須なので、予め対象のWHERE句を含めておくと便利です。
SELECT * FROM Products WHERE IdList IN ('15700','S43') AND IdType = 'SellerSKU';
気をつけたいこと
CData Driver の機能上、UNIONや複数のJOINが利用できますが、前述の通りAPIの制約を回避できるわけではありません。
例えば内部で大量のリクエストが発生してしまうものをカスタムビューとして登録してしまうとAPI Limitにひっかかり、エラーが発生する可能性もあります。
場合によっては、CDataSyncのようなレプリケーション製品を利用して、一度RDBやDWHに格納してから、JOINなどを実行するのがいい場合もあります。
https://www.cdata.com/jp/sync/
もしアプローチに迷ったり、API Limitの回避方法について悩んだ場合は、CData テクニカルサポートまでお気軽に相談してみてください。