使用聚合函数的查询 - Amazon Timestream
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从2025年6月20日起,亚马逊Timestream版 LiveAnalytics 将不再向新客户开放。如果您想使用亚马逊 Timestream LiveAnalytics,请在该日期之前注册。现有客户可以继续照常使用该服务。有关更多信息,请参阅 Amazon Timestream 以了解 LiveAnalytics 可用性变更。

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

使用聚合函数的查询

以下是物联网场景示例数据集的示例,用于说明使用聚合函数的查询。

示例数据

Timestream 使您能够存储和分析物联网传感器数据,例如一个或多个卡车车队的位置、油耗、速度和负载能力,从而实现有效的车队管理。以下是 iot_trucks 表的架构和一些数据,该表存储了卡车的位置、油耗、速度和装载能力等遥测数据。

Time 卡车_ID Make 模型 实例集 燃料容量 负载容量 measure_name measure_value::double measure_value::varchar

2019-12-04 19:00:00.000 000 000

123456781

GMC

Astro

Alpha

100

500

fuel_reading

65.2

null

2019-12-04 19:00:00.000 000 000

123456781

GMC

Astro

Alpha

100

500

负载

400.0

null

2019-12-04 19:00:00.000 000 000

123456781

GMC

Astro

Alpha

100

500

speed

90.2

null

2019-12-04 19:00:00.000 000 000

123456781

GMC

Astro

Alpha

100

500

location

null

47.6062 N,122.3321 W

2019-12-04 19:00:00.000 000 000

123456782

肯沃思

W900

Alpha

150

1000

fuel_reading

10.1

null

2019-12-04 19:00:00.000 000 000

123456782

肯沃思

W900

Alpha

150

1000

负载

950.3

null

2019-12-04 19:00:00.000 000 000

123456782

肯沃思

W900

Alpha

150

1000

speed

50.8

null

2019-12-04 19:00:00.000 000 000

123456782

肯沃思

W900

Alpha

150

1000

location

null

40.7128 北 40.7128 度,西 74.0060 度

示例查询

获取车队中每辆卡车正在监控的所有传感器属性和值的列表。

SELECT truck_id, fleet, fuel_capacity, model, load_capacity, make, measure_name FROM "sampleDB".IoT GROUP BY truck_id, fleet, fuel_capacity, model, load_capacity, make, measure_name

获取过去 24 小时内车队中每辆卡车的最新燃油读数。

WITH latest_recorded_time AS ( SELECT truck_id, max(time) as latest_time FROM "sampleDB".IoT WHERE measure_name = 'fuel-reading' AND time >= ago(24h) GROUP BY truck_id ) SELECT b.truck_id, b.fleet, b.make, b.model, b.time, b.measure_value::double as last_reported_fuel_reading FROM latest_recorded_time a INNER JOIN "sampleDB".IoT b ON a.truck_id = b.truck_id AND b.time = a.latest_time WHERE b.measure_name = 'fuel-reading' AND b.time > ago(24h) ORDER BY b.truck_id

找出在过去 48 小时内低油耗(低于 10%)的卡车:

WITH low_fuel_trucks AS ( SELECT time, truck_id, fleet, make, model, (measure_value::double/cast(fuel_capacity as double)*100) AS fuel_pct FROM "sampleDB".IoT WHERE time >= ago(48h) AND (measure_value::double/cast(fuel_capacity as double)*100) < 10 AND measure_name = 'fuel-reading' ), other_trucks AS ( SELECT time, truck_id, (measure_value::double/cast(fuel_capacity as double)*100) as remaining_fuel FROM "sampleDB".IoT WHERE time >= ago(48h) AND truck_id IN (SELECT truck_id FROM low_fuel_trucks) AND (measure_value::double/cast(fuel_capacity as double)*100) >= 10 AND measure_name = 'fuel-reading' ), trucks_that_refuelled AS ( SELECT a.truck_id FROM low_fuel_trucks a JOIN other_trucks b ON a.truck_id = b.truck_id AND b.time >= a.time ) SELECT DISTINCT truck_id, fleet, make, model, fuel_pct FROM low_fuel_trucks WHERE truck_id NOT IN ( SELECT truck_id FROM trucks_that_refuelled )

查找过去一周每辆卡车的平均负载量和最大速度:

SELECT bin(time, 1d) as binned_time, fleet, truck_id, make, model, AVG( CASE WHEN measure_name = 'load' THEN measure_value::double ELSE NULL END ) AS avg_load_tons, MAX( CASE WHEN measure_name = 'speed' THEN measure_value::double ELSE NULL END ) AS max_speed_mph FROM "sampleDB".IoT WHERE time >= ago(7d) AND measure_name IN ('load', 'speed') GROUP BY fleet, truck_id, make, model, bin(time, 1d) ORDER BY truck_id

获取过去一周每辆卡车的装载效率:

WITH average_load_per_truck AS ( SELECT truck_id, avg(measure_value::double) AS avg_load FROM "sampleDB".IoT WHERE measure_name = 'load' AND time >= ago(7d) GROUP BY truck_id, fleet, load_capacity, make, model ), truck_load_efficiency AS ( SELECT a.truck_id, fleet, load_capacity, make, model, avg_load, measure_value::double, time, (measure_value::double*100)/avg_load as load_efficiency -- , approx_percentile(avg_load_pct, DOUBLE '0.9') FROM "sampleDB".IoT a JOIN average_load_per_truck b ON a.truck_id = b.truck_id WHERE a.measure_name = 'load' ) SELECT truck_id, time, load_efficiency FROM truck_load_efficiency ORDER BY truck_id, time