唯一维度值 - Amazon Timestream
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics,可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间,以实现实时分析。点击此处了解更多信息。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

唯一维度值

您可能遇到这样的使用案例:在控制面板中,您希望将维度的唯一值作为变量,用于深入分析特定数据切片对应的指标。下方快照是一个示例,其中控制面板预先填充了多个维度的唯一值,例如区域、单元格、筒仓、微服务和可用区。在此我们演示如何利用计划查询,显著加快计算这些变量与所跟踪指标的不同值。

关于原始数据

您可以使用 SELECT DISTINCT 计算数据中出现的不同值。例如,如果要获取 region 的不同值,可使用此形式的查询。

SELECT DISTINCT region FROM "raw_data"."devops" WHERE time > ago(1h) ORDER BY 1

您可能正在跟踪数百万台设备和数十亿个时间序列。然而,在大多数情况下,这些有趣的变量属于基数较低的维度,其中包含的值仅有几个到几十个。从原始数据中计算 DISTINCT 可能需要扫描大量数据。

预先计算唯一的维度值

您希望这些变量快速加载,以便控制面板能够进行交互。此外,这些变量通常在每次控制面板加载时进行计算,因此还应具有成本效益。您可使用计划查询来优化这些变量的查找过程,并将结果具体化到派生表中。

首先,您需要确定需要计算 DISTINCT 值的维度,或确定在计算 DISTINCT 值时用于谓词的列。

在此示例中,您可以发现控制面板正在为维度区域、单元格、筒仓、可用区和微服务填充不同的值。因此,您可以使用以下查询预先计算这些唯一值。

SELECT region, cell, silo, availability_zone, microservice_name, min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime GROUP BY region, cell, silo, availability_zone, microservice_name

有一些重要事项需要注意。

  • 您可以使用一个计划计算,以预先计算许多不同查询的值。例如,您正在使用上述查询,以预先计算五个不同变量的值。因此,无需为每个变量单独创建一个。您可以使用相同的模式来识别多个面板间共享的计算,从而优化需要维护的计划查询数量。

  • 维度的唯一值本身并非时间序列数据。因此,需使用 @scheduled_runtime 将其转换为时间序列。通过将此数据与 @scheduled_runtime 参数相关联,您还可以跟踪给定时间点出现的唯一值,据此创建时间序列数据。

  • 在前面的示例中,您将看到正在被跟踪的指标值。此示例使用 COUNT(*)。如果要在控制面板中跟踪其他有意义的聚合数据,您可自行计算。

以下是使用先前查询进行计划计算的配置。在此示例中,使用计划表达式 cron(0/15 * * * ? *),配置为每 15 分钟刷新一次。

{ "Name": "PT15mHighCardPerUniqueDimensions", "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime GROUP BY region, cell, silo, availability_zone, microservice_name", "ScheduleConfiguration": { "ScheduleExpression": "cron(0/15 * * * ? *)" }, "NotificationConfiguration": { "SnsConfiguration": { "TopicArn": "******" } }, "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName": "derived", "TableName": "hc_unique_dimensions_pt15m", "TimeColumn": "time", "DimensionMappings": [ { "Name": "region", "DimensionValueType": "VARCHAR" }, { "Name": "cell", "DimensionValueType": "VARCHAR" }, { "Name": "silo", "DimensionValueType": "VARCHAR" }, { "Name": "availability_zone", "DimensionValueType": "VARCHAR" }, { "Name": "microservice_name", "DimensionValueType": "VARCHAR" } ], "MultiMeasureMappings": { "TargetMultiMeasureName": "count_multi", "MultiMeasureAttributeMappings": [ { "SourceColumn": "numDataPoints", "MeasureValueType": "BIGINT" } ] } } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } }, "ScheduledQueryExecutionRoleArn": "******" }

计算派生表中的变量

一旦计划计算在派生表 hc_unique_dimensions_pt15m 中预先生成唯一值,即可利用该派生表高效计算维度的唯一值。以下是示例查询,介绍如何计算唯一值,以及如何在这些唯一值查询中使用其他变量作为谓词。

区域

SELECT DISTINCT region FROM "derived"."hc_unique_dimensions_pt15m" WHERE time > ago(1h) ORDER BY 1

单元格

SELECT DISTINCT cell FROM "derived"."hc_unique_dimensions_pt15m" WHERE time > ago(1h) AND region = '${region}' ORDER BY 1

筒仓

SELECT DISTINCT silo FROM "derived"."hc_unique_dimensions_pt15m" WHERE time > ago(1h) AND region = '${region}' AND cell = '${cell}' ORDER BY 1

微服务

SELECT DISTINCT microservice_name FROM "derived"."hc_unique_dimensions_pt15m" WHERE time > ago(1h) AND region = '${region}' AND cell = '${cell}' ORDER BY 1

可用区

SELECT DISTINCT availability_zone FROM "derived"."hc_unique_dimensions_pt15m" WHERE time > ago(1h) AND region = '${region}' AND cell = '${cell}' AND silo = '${silo}' ORDER BY 1