教程:编写有效查询以加入指标数据

重要

从 2023 年 9 月 20 日开始,将无法创建新的 Azure 指标顾问资源。 指标顾问服务将于 2026 年 10 月 1 日停用。

本教程介绍如何执行下列操作:

  • 如何编写有效的数据加入查询
  • 常见错误及其规避方法

必备条件

创建“指标顾问”资源

若要探索指标顾问的功能,需要在 Azure 门户中创建指标顾问资源,以部署指标顾问实例。

数据架构要求

Azure AI 指标顾问是一项用于时序异常检测、诊断和分析的服务。 作为由 AI 提供支持的服务,它使用你的数据来训练所使用的模型。 服务接受具有以下各列的聚合数据表:

  • 度量值(必需):度量值是一个基本术语或单位特定的术语,是指标的可量化值。 它指一个或多个包含数值的列。
  • 时间戳(可选):零个或一个类型为 DateTimeString 的列。 如果未设置此列,则时间戳将设置为每个引入周期的开始时间。 设置时间戳的格式,如下所示:yyyy-MM-ddTHH:mm:ssZ
  • 维度(可选):维度是一个或多个分类值。 这些值的组合标识特定的单变量时序(例如国家/地区、语言、租户等)。 维度列可以是任意数据类型。 处理大量的列和值时要格外小心,应避免处理过多的维度。

如果使用数据源(如 Azure Data Lake Storage 或 Azure Blob 存储),则可将数据聚合在一起,使其与预期的指标架构一致。 这是因为这些数据源使用文件作为指标输入。

如果使用的是 Azure SQL 或 Azure 数据资源管理器等数据源,则可使用聚合函数将数据聚合到预期的架构中。 这是因为这些数据源支持通过运行查询来从源获取指标数据。

“指标顾问”中的数据引入原理

通常有两种方法将指标加入“指标顾问”:

  • 将指标预先聚合到预期的架构中,并将数据存储到某些文件中。 在加入过程中填写路径模板,“指标顾问”将从该路径持续获取新文件,并对指标执行检测。 这是针对 Azure Data Lake 和 Azure Blob 存储等数据源的常见做法。
  • 如果要从 Azure SQL Server、Azure 数据资源管理器或其他源等支持使用查询脚本的数据源中引入数据,则需要确保正确构造查询。 本文将指导如何编写有效的查询以按预期加入指标数据。

什么是时间间隔?

指标需要根据业务需求按某种粒度进行监视。 例如,业务关键性能指标 (KPI) 按天的粒度进行监视。 但是,服务性能指标常常按分钟/小时的粒度进行监视。 因此,从源收集指标数据的频率各有不同。

“指标顾问”按每个时间间隔持续获取指标数据,该时间间隔等同于指标的粒度。每次,指标顾问运行在此特定时间间隔内写入数据的查询。 根据此数据引入机制,查询脚本不应返回数据库中存在的所有指标数据,而需将结果限制为单个时间间隔内。

Illustration that describes what is an interval

如何编写有效查询?

Use @IntervalStart and @IntervalEnd to limit query results

为了帮助实现这一点,提供两个在查询中使用的参数:@IntervalStart 和 @IntervalEnd。

每次运行查询时,都会将 @IntervalStart 和 @IntervalEnd 自动更新为最新的时间间隔时间戳并获取相应的指标数据。 @IntervalEnd 始终分配为 @IntervalStart + 1 的粒度。

下面是针对 Azure SQL Server 正确使用这两个参数的示例:

SELECT [timestampColumnName] AS timestamp, [dimensionColumnName], [metricColumnName] FROM [sampleTable] WHERE [timestampColumnName] >= @IntervalStart and [timestampColumnName] < @IntervalEnd;

采用这种方式编写查询脚本后,指标的时间戳应在每个查询结果的时间间隔内。 “指标顾问”会自动将时间戳与指标粒度对齐。

使用聚合函数来聚合指标

通常情况下,客户数据源中包含许多列,但并不是所有列都可以作为维度去监视或纳入。 客户可以使用聚合函数来聚合指标并仅包含有意义的列作为维度。

在下面的示例中,客户的数据源包含超过 10 列的数据,但只有少量列有意义且需要包含并聚合到要监视的指标中。

TS 市场 设备 OS 类别 ... Measure1 Measure2 Measure3
2020-09-18T12:23:22Z 纽约 iOS 太阳眼镜 ... 43242 322 54546
2020-09-18T12:27:34Z 北京 Android 包包 ... 3333 126 67677
...

如果客户想要按小时粒度监视“Measure1”,并选择“Market”和“Category”作为维度,以下示例介绍了如何正确使用聚合函数来实现此目的:

  • SQL 示例:

        SELECT dateadd(hour, datediff(hour, 0, TS),0) as NewTS
        ,Market
        ,Category
        ,sum(Measure1) as M1
        FROM [dbo].[SampleTable] where TS >= @IntervalStart and TS < @IntervalEnd
        group by Market, Category, dateadd(hour, datediff(hour, 0, TS),0)
    
  • Azure 数据资源管理器示例:

        SampleTable
        | where TS >= @IntervalStart and TS < @IntervalEnd
        | summarize M1 = sum(Measure1) by Market, Category, NewTS = startofhour(TS)
    

注意

在上例中,客户想要按小时的粒度监视指标,但原始时间戳 (TS) 不匹配。 在聚合语句中,需要对时间戳执行一个过程使其按小时对齐,并生成一个名为“NewTS”的新时间戳列。

加入过程中的常见错误

  • 错误: 在查询结果中找到多个时间戳值

    这是常见错误,原因是未将查询结果限制在某个时间间隔内。 例如,如果按天的粒度监视指标,当查询返回的结果如下所示时,则出现此错误:

    Screenshot that shows multiple timestamp values returned

    包含多个时间戳值,且这些值不在指标的同一个时间间隔中(一天)。 请查看“指标顾问”中的数据引入原理,了解“指标顾问”将获取每个指标时间间隔内的指标数据。 然后,请确保在查询中使用 @IntervalStart 和 @IntervalEnd,以将结果限制在一个时间间隔内。 查看 Use @IntervalStart and @IntervalEnd to limit query results 以了解详细指南和示例。

  • 错误: 在一个指标时间间隔内的同一个维度组合中发现重复的指标值

    在一个时间间隔内,“指标顾问”只应为同一维度组合提供一个指标值。 例如,如果按天的粒度监视指标,当查询返回的结果如下所示时,则出现此错误:

    Screenshot that shows duplicate values returned

    有关详细指导和示例,请参阅使用聚合函数来聚合指标

后续步骤

转到下一篇文章,了解如何创建。