本記事では CData サポート担当からこんなことを聞かれたらどこを確認すべきか?という観点で、よく頂くお問合せ内容をご紹介します。
記事はこちら →CData Query Federation Driver の利用例
疋田 圭介 | 2020年05月10日クラウドCRM サービスとローカルデータベースのように本来関係があるデータが分散してしまうことが増えており、データの統合利用には大きな開発負荷とコストがかかります。これを解消するための方法の一つにデータウェアハウス(DWH)のような一つのデータストアにすべてのデータを一度移動させる方法がありますが、一定の規模に達しない運用ではデータウェアハウスを使うことがコスト高になってしまい理想的ではないこともあります。CData Software のQuery Federation Driver を使うことで、データが実際に存在するロケーションを意識せず、分散したデータを仮想統合して扱うことができるようになります。
Salesforce の受注情報をExcel の予算と集計・比較する、NetSuite のアカウント情報を基幹システムに入っている取引先DB とJOIN する、kintone の案件情報とMoneyForward の請求書情報を統合してデータ連携利用する、SQL Server とMySQL に入ったデータをリレーション付けをしてクエリする、そんなケースをCData Query Federation Driver は解決します。CData では、それぞれのRDB、SaaS、NoSQL に接続するための単体ドライバー を提供していますが、Query Federation Driver は、ドライバーでアクセスできるデータを仮想統合し、複数のドライバーを単一のDB インターフェースとして利用可能にします。複数のDB、SaaS にまたがる結合クエリや集計が標準SQL で自由自在に書けるようになります。
本記事では、いくつかのシナリオを基にQuery Federation Driver の使い方を説明します。Query Federation Driver の設定詳細記事へのリンクも提供しています。
例 1: RDB(リレーショナルデータベース)間のデータフェデレーション(SQL Server & MySQL)
この例では、MySQL インスタンスに受注データが、それにリレーションのある顧客データがSQL Server インスタンスに格納されています。取引先毎の発注の配送費用を計算するには、通常はどちらかのデータベースにデータをコピーする必要があります。Query Fedearation Driver では、既存の複数のRDB のテーブルデータをSQL でクエリすることができます。
SQL Server の顧客(Customers)
MySQL の注文(Orders)
SQL Server とMYSQL 間のデータのJOIN
両方のテーブルにCustomer ID フィールドがあるので、2つのデータをCustomerID でJOIN します。
SELECT sqlserverdb.Customers.CompanyName, ROUND(SUM(mysqldb.orders.Freight),2) AS TotalFreight FROM sqlserverdb.Customers JOIN mysqldb.orders ON sqlserverdb.Customers.CustomerID = mysqldb.orders.CustomerID GROUP BY sqlserverdb.Customers.CustomerID
クエリ結果をDBVisualizer で確認
クエリツールのDBVisualizer でJOIN されたクエリ結果を確認できます。このように簡単にQuery Federation Driver を使って、ドライバーレイヤーで2つの異なるデータソースの結合クエリができました。帳票、ビジュアライゼーションなどでこのまま使うことができます。
例 2: Salesforce とExcel 間のデータの仮想統合
CRM(Salesforce)の取引先情報にひも付いたExcel ファイルの案件情報があります。売上予測を地域別などに分けたい場合には、Excel ベースの案件情報をSalesforce にアップロードするか、Salesforce 情報をExcel にダウンロードして使っています。Query Federation Driver では、そのような処理は不要で、直接Salesforce とExcel を統合してクエリすることができます。
Excel の案件(Opportunities)
Salesforce の取引先(Accounts)
Salesforce とExcel をまたいでJOIN
Salesforce とExcel 両方に企業名があるので、企業名をキーにして、データをJOIN します。
SELECT salesforcedb.Account.BillingState, ROUND(SUM(exceldb.Opportunity.ExpectedRevenue),2) AS TotalRevenue FROM exceldb.Opportunity JOIN salesforcedb.Account ON exceldb.Opportunity.Company = salesforcedb.Account.Name GROUP By salesforcedb.Account.BillingState
クエリ結果をDBVisualizer で確認
クエリツールのDBVisualizer で上記クエリを実行して、JOIN された結果を確認します。当然帳票やBI ツールでこのようなクエリが使えます。
例 3: NetSuite とMySQL データベースを仮想統合
この例では、NetSuite に在庫データ、MySQL にNetSuite の在庫の購入価格に対する未入力仕入価格変動のデータが入っています。NetSuite のInternalID を使って、最新価格を取得したいです。
MySQL の在庫アップデート(Inventory Updates)
NetSuite 在庫アイテム(Inventory Items)
MySQL とNetSuite データの結合クエリ
両方のソースに共通のID フィールドをキーにしてJOIN を行い、価格変動があった製品だけをフィルタリングします。
SELECT netsuitedb.InventoryItem.InternalID, mysqldb.inventoryupdates.PurchasePrice AS NewPrice, netsuitedb.InventoryItem.LastPurchasePrice FROM mysqldb.inventoryupdates JOIN netsuitedb.InventoryItem ON mysqldb.inventoryupdates.ItemID = netsuitedb.InventoryItem.ItemID WHERE netsuitedb.InventoryItem.LastPurchasePrice IS NULL OR mysqldb.inventoryupdates.PurchasePrice <> netsuitedb.InventoryItem.LastPurchasePrice
クエリ結果をDBVisualizer で確認
クエリツールのDBVisualizer で上記クエリを実行して、JOIN された結果を確認します。このリストでNetSuite のデータをアップデートすればOK です。
製品リンクおよび無償評価版
このようにCData Query Federation Driver を使って、複数のデータソースにわたる仮想統合を標準SQL のJOIN で結合することができます。Query Federation Driver の設定方法は、KB 記事 を参照してください。ぜひ、Query Federation Driver の30日の無償評価版 をダウンロードしてお試しください。