Skip to content

Semantic Data Interconnect (SDI) Data Query Service

构想

Semantic Data Interconnect (SDI) Data Query Service 能够用于创建、更新、检索、删除和执行查询(基于JSON 和原生 SQL)。

访问

要访问此服务,您需要具有 SDI roles and scopes 中列出相应的角色。

SDI Data Query Service APIs 可通过以下方式访问:

  1. 使用 REST 客户端: SDI 管理员角色的用户可以SDI Data Query APIs 创建、更新、删除和检索查询。将来,用户还可以访问内置的查询编辑器。
  2. 使用应用: 基于 SDI 构建的分析应用可以使用查询结果查询数据。查询结果 API 可以与分析应用集成。

应用用户可以使用 REST 客户端访问 REST API。用户需要不同的角色来访问 SDI 数据查询服务的不同 APIs。 SDI Data Query Service APIs 可以由 SDI 管理员角色或技术用户角色访问。唯一的例外是查询结果 API 可以由SDI管理员、技术用户和 SDI 用户角色访问。

说明

SDI Data Query Service APIs 由 MindSphere 使用 OAUTH 凭证认证方法保护。

基础

您可以使用 SDI Data Query Service 创建和执行业务查询以及物理查询。业务查询基于所选的语义模型进行验证,而物理查询则基于租户内数据的物理模式进行验证。 用户需要使用定制的 JSON 查询格式或原生 SQL 查询格式来创建查询。有关如何规划查询的更多信息,请参考 How to create queries.

SDI 提供了最先进的原生 SQL 查询引擎来跨不同的数据源查询数据。用户现在可以利用内置的查询功能来洞察语义相关的数据。

查询可以是基于物理模式的查询,也可以是基于语义的查询。它们可以是数据分析师创建的静态查询,也可以是最终用户使用的动态查询,这些查询可以帮助用户在单个查询上创建具有不同输入参数范围的多个执行请求。

功能

SDI 支持自定义原生 SQL 查询和基于 JSON 的查询。原生 SQL 查询格式支持静态和动态查询类型。动态查询是参数化查询,可以提供动态筛选器输入,也可以提供别名来查询结果属性。SDI 支持 Where、inner join、select、order by、from 等操作符。 查询服务支持语义查询和基于物理模式的查询。如果您已经基于不完全语义模型创建了语义查询,那么 SDI 允许用户保存查询,但是获取查看结果需要用户更新完整语义模型细节。 基于物理模式的查询根据物理模式进行验证。只有经过验证的查询可以保存,并根据提供的模式进行验证。 自定义 JSON 查询格式只支持静态查询。

基于原生 SQL 的查询同时支持静态和动态(Parameterized queriesalias for query result column names)查询。

在SQL查询中,可以在where子句或 having 子句中定义列值。如果用户在创建查询期间为列属性提供值,则该查询将被视为静态查询。 用户不能为静态查询创建执行作业请求,因为系统是在查询创建之后创建的。如果用户在验证后更新查询,则系统将重新执行该查询。

被分类为动态查询时(isDynamic=TRUE), 如果用户希望在执行时提供不同的参数值或者需要不同的别名(显示名称)列在select语句中,那么用户可以设置isDynamic标志为true,并在作业创造执行时提供参数值和别名。 用户可以创建多个执行作业。

如果动态查询得到更新,那么所有执行作业都将被标记为作废。用户将获得过时的执行作业的过时结果。然后,用户需要创建一个新的执行作业来获得新的结果。

如果数据摄取发生在相应查询的受影响的模式上,系统将验证由于模式更改而产生的所有受影响的查询。
如果验证失败,则

  • 在静态查询的情况下,用户将不会收到执行的结果。对于有效的查询,用户可以在几秒钟内看到过期的结果,然后看到新的结果。
  • 在动态查询的情况下,所有的执行作业都将被标记为作废,用户将根据这些id获得过时的结果。

如果查询验证成功,则 - 所有的查询将被重新执行,用户将得到当前的结果后执行。对于执行不完全的所有查询,用户将得到过时的结果。

SDI 验证用户创建的每个查询。如果查询不可执行,则 SDI 将“可执行”标记为False。这有助于用户理解查询为何无法执行。要修改查询,用户可以分析提供给用户修改查询的“pendingActions”。一旦“可执行”标记为 TRUE,用户就可以获得执行状态的结果。目前,SDI 为提供的查询结果提供 currentoutdatedobsolete

SDI 目前支持 UTC 格式日期(例如,2020-02-15T04:46:13Z)和 W3C 格式日期(例如,2020-10-15T04:46:13+00:00)。

说明

在添加到请求之前,应该使用 base64 编码器对原生 SQL 进行编码。

限制

  • 查询结果和执行结果 API 的超时时间为60秒。
  • 每个租户对 SDI 的最大并发请求限制为100。
  • 每个租户在 SDI 中最多存储100个查询。
  • 每个租户的执行工作数量将有软限制和硬限制。更多详情,请联系技术支持。
  • 查询中 select columns 的数量将有软限制和硬限制。更多详情,请联系技术支持。
  • 查询结果响应的最大有效负载为250 MB 或100万行记录(取决于哪个限制先达到)。
  • where 子句中,如果列值是 “string”,那么用户需要在单引号 '{value}' 中传递值。
  • 用户只能创建 select 查询。

基于原生 SQL 查询限制

  • 当前版本不支持基于语义模型的业务查询。只支持基于物理模式的SQL查询。
  • 在原生 SQL 查询中,如果模式名或属性名包含任何特殊字符,则用反号(')将其括起来。
  • 当前版本不支持以下 SQL 操作: top, select *, ALL, ANY, COUNT( * )
  • 不支持 FULL OUTER JOIN。用户可以使用 FULL JOIN 作为 FULL OUTER JOIN,因为两者是一样的。
  • 在具有 BETWEEN 功能的查询中,用户不应该使用 BETWEEN #{date}# AND #{date}# 格式,而应该使用 BETWEEN '{date}' AND '{date}' 格式。
  • 在查询字符串连接使用 CONCAT 函数。

基于 JSON 查询限制

  • 如果模式名有特殊字符 “.”,那么用户需要使用 "\"{schemaname}\"" 来引用模式名或列。整个查询都需要遵循这一规则。部分使用 "\"{schemaname}\"" 模式名或列产生错误。
  • JSON 格式查询目前不支持以下 SQL 操作:
    • IN , NOT IN, BETWEEN, LIMIT, LIKE, MIN, MAX, SUM, AVG
    • COUNT, Distinct
    • NOT
    • IS NULL
    • Alias
    • Left join , right join , full join , outer join, exists, self-join
    • GROUP BY , HAVING
    • union , subquery, all, intersect
    • Insert into , select top

说明

使用原生 SQL 查询可以克服基于 JSON 查询限制。

更多信息,请参考发布说明.

示例场景

应用开发者希望将查询结果 API 集成到仪表板应用以接收查询的数据。
数据从企业资源规划(ERP)和物联网数据中摄取到 SDI ,然后 SDI 自动生成模式。数据分析人员可以根据语义模型或数据编目中的不同模式制定查询。每个查询都由queryid 唯一标识。应用开发者可以使用 queryid,并将查询结果 API 集成到仪表板应用中以接收查询的数据。

此外,动态查询功能帮助用户在一个查询上创建多个执行请求。例如,如果用户想要创建一个显示来自不同位置的工厂性能信息的仪表板。那么应用程序开发人员可以为不同的工厂提供相同的数据属性创建查询,位置值可以通过不同的执行请求动态发送。

这有助于用户动态地提供筛选器值的范围,在此范围内可以使用相关的查询数据结果。 最后,标准的原生 SQL 查询引擎提供了在查询中创建不同聚合函数的能力,这些聚合函数可用于创建不同的 KPI 分析,并支持各种用例,以便从不同来源的数据中获得洞察。

相关链接


Last update: March 22, 2023