by 疋田 圭介 | May 10, 2020

CData Query Federation Driver の利用例

クラウド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つの異なるデータソースの結合クエリができました。帳票、ビジュアライゼーションなどでこのまま使うことができます。

DBVisualizer でSQL Server とMySQL のJOIN クエリを確認

例 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 ツールでこのようなクエリが使えます。

DBVisualizer でSalesforce とExcel データをJOIN

例 3: NetSuite とMySQL データベースを仮想統合

この例では、NetSuite に在庫データ、MySQL にNetSuite の在庫の購入価格に対する未入力仕入価格変動のデータが入っています。NetSuite のInternalID を使って、最新価格を取得したいです。

MySQL の在庫アップデート(Inventory Updates)

MySQL の在庫アップデート

NetSuite 在庫アイテム(Inventory Items)

NetSuite 在庫アイテム

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 です。

DBVisualizer でNetSuite とMySQL データをJOIN

製品リンクおよび無償評価版

このようにCData Query Federation Driver を使って、複数のデータソースにわたる仮想統合を標準SQL のJOIN で結合することができます。Query Federation Driver の設定方法は、KB 記事 を参照してください。ぜひ、Query Federation Driver の30日の無償評価版 をダウンロードしてお試しください。



 
 
ダウンロード