Fabric API for GraphQL 的一个关键优势是能够通过单个统一的 API 端点提供多个数据源的访问,比如数据湖库、数据仓库和数据库。 这意味着应用程序可以从单个 GraphQL 查询中的不同源检索数据,而无需单独连接到多个 API 或数据库。
例如,你可能在一个仓库中有客户数据,而在另一个湖仓中有库存数据。 可以同时通过 GraphQL API 查询这两个源,减少网络开销并简化应用程序代码,而不是进行两个单独的 API 调用。
多源查询的工作原理
发出跨多个数据源的 GraphQL 查询时,API 会自动并行向每个数据源发出单个请求,然后将结果合并为单个响应。 此方法:
- 减少往返次数:应用程序发出一个请求而不是多个顺序调用
- 提高性能:并行执行意味着更快的整体响应时间
- 简化客户端代码:无论数据存储在何处,都可以使用单个 API 接口
重要
多源查询具有以下限制:
- 不能在跨不同数据源的类型之间创建关系。 关系仅在单个数据源中起作用。
- 对每个数据源的单个请求并行执行,且没有保证的顺序。
- 对数据源的每个请求都是独立的-没有跨多个源的事务。
查询示例
业务方案:假设你正在构建一个仪表板,并排显示客户信息和产品库存状态。 您的客户数据存储在销售仓库(ContosoSales),而您的产品库存则由供应链系统更新,并在一个单独的数据湖仓(ContosoInventory)中进行管理。 如果没有多源支持,则需要进行两个单独的 API 调用、管理两个不同的连接,并将数据自己合并到应用程序代码中。
使用 Fabric API for GraphQL,可以在单个查询中从这两个源检索数据:
query {
customers (first: 1) {
items {
FirstName
LastName
}
}
inventories (first: 1) {
items {
Name
}
}
}
此单个请求从 ContosoSales 数据源检索客户记录,并从 ContosoInventory 数据源并行检索客户记录,并将其合并为一个响应。 仪表板通过一个 API 调用(而不是两个)获取它所需的所有数据。
请求的输出为:
{
"data": {
"customers": {
"items": [
{
"FirstName": "Orlando",
"LastName": "Gee"
}
]
},
"inventories": {
"items": [
{
"Name": "AWC Logo Cap"
}
]
}
}
}
响应结构镜像查询结构。 在对象中 data ,有两个顶级字段(customers 和 inventories)对应于你进行的两个查询。 每个字段都包含一个 items 包含实际结果的数组。 这些customers项具有类似FirstNameLastName属性,而inventories项的属性与Name查询中请求的属性完全相同。
这是执行此请求时查询视图的外观: