OData - 最佳实践和故障排除
遵循这些最佳实践和故障排除提示,以最有效地利用 OData 客户端。
性能
OData 服务的性能取决于访问的数据类型。例如,读取 1M 数据点需要大约 2 分半到 3 分钟(每秒读取 6K 数据点)。每个完整请求平均需要 120 ms,并且 OData 客户端可能会增加处理和数据处理的额外开销。
遵循这些常规最佳实践,以确保获得最佳且最可靠的性能:
- 切勿使用
OR
表达式或展开表格。 - 尽量使用多个查询。
- 使用增量刷新。
- 如有可能,分割数据集。
- 仅保留需要的数据。删除不需要的列和数据。
- 如果不需要每天获得数据,则将历史数据保留在单独的报告中。需要时刷新历史数据报告。
编写高性能查询
OData 服务可接受多个并发请求并平行处理这些请求。如果可能,OData 客户端还会同时发出多个查询。
最好编写和使用多个查询,而不是使用单个复杂查询,例如 OR
表达式或扩展。单个复杂查询必须按顺序迭代,每个请求都会增加往返延迟。
使用多个查询下载数据,并在 OData 客户端中合并生成的表格,以便像处理单个表格一样处理这些表格。
使用增量刷新
增量刷新能够赋予大型数据集以下优点:
- 只需要刷新已更改的数据。
- 不需要与来源系统保持长时间运行的连接。
- 刷新较少的数据可以减少内存和其他资源的消耗量。
每个 OData 客户端可能具有不同的增量刷新功能。对于 Microsoft Power BI,请参阅 Power BI 中语义模型的增量刷新。
分割大型数据集
如果需要下载大型数据集,请对它们进行分区,并使用单独的查询来读取每个分区。某些 OData 客户端(如 Microsoft Power BI)可以同时处理多个查询。对数据集进行分区能够显著提高性能。
例如,如果你要读取过去两年的数据点,请尝试将查询拆分成两个查询,各读取一年的数据。然后,在 Power BI 中合并(连接)表格。
元数据和 CDF RAW 中的属性命名
元数据和 CDF 数据准备区 (RAW) 的属性键必须是有效标识符,并且只能包含字母、数字或下划线。OData 服务会将其他字符重写为下划线。为了获得最佳且最可预测的结果,请确保引入的数据遵循此属性键命名约定:^[a-zA-Z][_a-za-z0-9]\*[a-zA-Z0-9]\$
。
故障排除
查找信息以帮助解决使用 CDF 作为 OData 客户端的数据源时出现的问题。
查询耗时过长
CDF 项目可能包含数亿行的数据,因此将它们全部加载到 OData 客户端中是不可行的。如果执行查询需要几个小时,则有可能是因为正在尝试加载太多数据。
请参阅筛选数据模型中的项目和筛选 asset-centric 资源类型,了解 OData 服务支持的筛选功能。
未获得全部结果
如果获得的结果少于预期,可能是因为你使用了 CDF 不支持的筛选函数,例如在时间序列的名称列中使用 startswith
。
请参阅筛选数据模型中的项目和筛选 asset-centric 资源类型,了解 OData 服务支持的筛选功能。
无法从 CDF RAW 检索最小值
如果在 OData 客户端中使用来自 CDF 数据准备区 CDF RAW 的数据,检索采用指数表示法的小数字时可能会遇到问题。
CDF RAW 没有架构,但是部分 OData 客户端(如 Power BI)中的 OData 库尝试为数据选择正确的格式。目前,Power BI 为指数表示法的小数字选择了错误的解码器,你可能遇到与以下相似的错误:
DataSource,Error: OData: Cannot convert the literal '2.89999206870561 to the expected type 'Edm.Decimal',
要解决此问题,请将值作为字符串而非数字引入 CDF RAW,然后在 Power BI 中将字符串转换回数字,例如使用 Decimal.From
Power Query M-函数。这样不会损失精度,而且由于大部分 JSON 解码器都接受数字字符串,因此需要数字的客户端仍可正常工作。