GraphQL 用 Fabric API の主な利点の 1 つは、単一の統合 API エンドポイントを介して複数のデータ ソース (Lakehouse、Warehouse、データベースなど) を公開できることです。 つまり、アプリケーションは 1 つの GraphQL クエリで異なるソースからデータを取得できるため、複数の API またはデータベースに個別に接続する必要がなくなります。
たとえば、ある倉庫に顧客データがあり、別のレイクハウスに在庫データがあるとします。 2 つの個別の API 呼び出しを行う代わりに、GraphQL API を使用して両方のソースに対して同時にクエリを実行できるため、ネットワークのオーバーヘッドが軽減され、アプリケーション コードが簡略化されます。
マルチソース クエリのしくみ
複数のデータ ソースにまたがる GraphQL クエリを発行すると、API は各データ ソースへの個々の要求を自動的に並列でファンアウトし、結果を 1 つの応答に結合します。 この方法の特徴は次のとおりです。
- ラウンド トリップを減らす: アプリケーションが複数の順次呼び出しの代わりに 1 つの要求を行う
- パフォーマンスの向上: 並列実行は全体的な応答時間の短縮を意味します
- クライアント コードを簡略化: データの格納場所に関係なく、1 つの API インターフェイスを使用できます
Important
マルチソース クエリには、次の制限があります。
- 異なるデータ ソースにまたがる型間にリレーションシップを作成することはできません。 リレーションシップは、1 つのデータ ソース内でのみ機能します。
- 各データ ソースに対する個々の要求は、保証された順序なしで並列で実行されます。
- データ ソースに対する各要求は独立しています。複数のソースにまたがるトランザクションはありません。
クエリの例
ビジネス シナリオ: 顧客情報と製品在庫の状態を並べて表示するダッシュボードを構築しているとします。 顧客データは販売倉庫 (ContosoSales) に存在し、製品在庫はサプライ チェーン システムによって更新された別のレイクハウス (ContosoInventory) で管理されます。 マルチソースのサポートがなければ、2 つの個別の API 呼び出しを行い、2 つの異なる接続を管理し、アプリケーション コードでデータを自分で組み合わせる必要があります。
GraphQL 用 Fabric API を使用すると、1 つのクエリで両方のソースからデータを取得できます。
query {
customers (first: 1) {
items {
FirstName
LastName
}
}
inventories (first: 1) {
items {
Name
}
}
}
この 1 つの要求は 、ContosoSales データ ソースから顧客レコードを取得し、 ContosoInventory データ ソースからインベントリ項目を並列で取得し、それらを 1 つの応答に結合します。 ダッシュボードは、2 つではなく 1 つの API 呼び出しで必要なすべてのデータを取得します。
要求に対する出力は次のとおりです。
{
"data": {
"customers": {
"items": [
{
"FirstName": "Orlando",
"LastName": "Gee"
}
]
},
"inventories": {
"items": [
{
"Name": "AWC Logo Cap"
}
]
}
}
}
応答構造は、クエリ構造を反映します。
data オブジェクト内には、作成した 2 つのクエリに対応する 2 つの最上位フィールド (customersとinventories) があります。 各フィールドには、実際の結果を含む items 配列が含まれています。
customers項目にはFirstNameやLastNameなどのプロパティが含まれますが、inventories項目にはクエリで要求されたとおりに、Nameなどのプロパティがあります。
この要求を実行すると、クエリ ビューがどのように表示されるかを次に示します。