CData Software Blog

クラウド連携のCData Software の技術ブログです。

ユーザー独自のクエリを予め登録できる「カスタムビュー機能」が追加されました:CData Driver v20 Update

f:id:sugimomoto:20201012092942p:plain

こんにちは。CData Software Japanリードエンジニアの杉本です。

CData Driver 最新バージョンであるV20では、新しい機能として「カスタムビュー」が追加されました。

今回はこの機能を紹介していきたいと思います。

カスタムビューとは?

ユーザー独自のビューを登録して、BIツールやETLツールから簡単に呼び出すことができるようになる機能です!

cdn.cdata.com

CData Driverはデータベースのサービスでは無いため、基本的には各データソースごとで事前定義されたテーブルもしくはビューをクエリするしかありませんでした。

f:id:sugimomoto:20201012092957p:plain

もちろん、JOIN句やWHERE句なども利用できますが、あらためてSQLを都度書かなければいけないところが少し面倒でしたが、このカスタムビューの機能によって予めよく使うSQLを登録しておき、各種ツールから一発でクエリできるようになりました。

なお、この機能は全ドライバー共通の機能です。

使い方

使い方は2パターンあります。

ODBC・Power BI Connector の場合

ODBCの場合は、DSN画面から作成することができます。

対象のDSNの構成画面(今回はAmazon Marketplace Driverを選びました)を開き

f:id:sugimomoto:20201012093006p:plain

テーブルタブから「テーブルまたはビュー」のリストを開いて、「Define New View」を選択します。

f:id:sugimomoto:20201012093011p:plain

あとはビューの名前とSQLを登録するだけです。

Amazon Marketplace Driverでは商品の一覧が取得できますが、APIの制約上必ずIDを指定する必要があるので、自分の出品している商品のIDを予め設定したビューを登録してみました。

f:id:sugimomoto:20201012093016p:plain

以上で登録できました。

f:id:sugimomoto:20201012093020p:plain

あとはPower BIやTableauなどのツールから接続する時に、UserViewsというところから選択するだけになります。楽ちんですね・・・!

f:id:sugimomoto:20201012093025p:plain

なお、設定はLocationフォルダに構成されます。

http://cdn.cdata.com/help/ONF/jp/jdbc/RSBAmazonMarketplace_p_Location.htm

JDBCADO.NETExcel Add-in 等の場合

接続プロパティのLocationで定義した場所に「UserDefinedViews.json」というファイルを作成して利用できるようにします。ODBCでも最終的にはこれと同じことが内部で行われています。

http://cdn.cdata.com/help/ONF/jp/jdbc/RSBAmazonMarketplace_p_Location.htm

以下のようにファイルを作成し

f:id:sugimomoto:20201012093031p:plain

下記のような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は様々なAPISQLベースで利用できるようになるコンポーネントですが、API側に存在している制約をすべて飲み込めるわけではありません。

例えば、CData Slack Driverでメッセージの一覧を取得したい場合、

通常であれば

SELECT * FROM Messages;

というようにクエリしたいところですが、Slack の API仕様上、以下のようにChannelIdを明示的に指定しなければいけません。

SELECT * FROM Messages WHERE ChannelId = 'D71R6CSR1' ;

cdn.cdata.com

この回避策として、以下のようなクエリで全チャネル横断取得ができますが、BIツールなどでは別途指定する箇所が増えて、二度手間感がありました。

SELECT * FROM Messages WHERE ChannelId IN (SELECT ChannelId FROM Channels) ;

それをカスタムビューとして登録しておくことで、一発で様々なツールから呼び出せるようになりました。

前述のAmazon Marketplaceも同様です。APIの制約上Idの指定が必須なので、予め対象のWHERE句を含めておくと便利です。

cdn.cdata.com

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/

f:id:sugimomoto:20201012093411p:plain

もしアプローチに迷ったり、API Limitの回避方法について悩んだ場合は、CData テクニカルサポートまでお気軽に相談してみてください。

https://www.cdata.com/jp/support/submit.aspx