在 Fabric API for GraphQL 中查询多个数据源

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 ,有两个顶级字段(customersinventories)对应于你进行的两个查询。 每个字段都包含一个 items 包含实际结果的数组。 这些customers项具有类似FirstNameLastName属性,而inventories项的属性与Name查询中请求的属性完全相同。

这是执行此请求时查询视图的外观:

编辑器屏幕的屏幕截图,其中显示了跨越两个数据源的查询。