翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
集計関数を使用したクエリ
以下は、集計関数を使用したクエリを説明するための IoT シナリオデータセットの例です。
データの例
Timestream を使用すると、1 つ以上のトラックのフリートの場所、燃料消費量、速度、負荷容量などの IoT センサーデータを保存および分析して、効果的なフリート管理が可能になります。以下は、トラックの位置、燃料消費量、速度、負荷容量などのテレメトリを保存するテーブル iot_trucks のスキーマとデータの一部です。
[時間] | truck_id | Make | モデル | フリート | fuel_capacity | load_capacity | measure_name | measure_value::double | measure_value::varchar |
---|---|---|---|---|---|---|---|---|---|
2019-12-04 19:00:00.000000000 |
123456781 |
GMC |
Astro |
[Alpha] (アルファ) |
100 |
500 |
fuel_reading |
65.2 |
null |
2019-12-04 19:00:00.000000000 |
123456781 |
GMC |
Astro |
[Alpha] (アルファ) |
100 |
500 |
ロード |
400.0 |
null |
2019-12-04 19:00:00.000000000 |
123456781 |
GMC |
Astro |
[Alpha] (アルファ) |
100 |
500 |
速度 |
90.2 |
null |
2019-12-04 19:00:00.000000000 |
123456781 |
GMC |
Astro |
[Alpha] (アルファ) |
100 |
500 |
ロケーション |
null |
47.6062 N、122.3321 W |
2019-12-04 19:00:00.000000000 |
123456782 |
ケンワース |
W900 |
[Alpha] (アルファ) |
150 |
1,000 |
fuel_reading |
10.1 |
null |
2019-12-04 19:00:00.000000000 |
123456782 |
ケンワース |
W900 |
[Alpha] (アルファ) |
150 |
1,000 |
ロード |
950.3 |
null |
2019-12-04 19:00:00.000000000 |
123456782 |
ケンワース |
W900 |
[Alpha] (アルファ) |
150 |
1,000 |
速度 |
50.8 |
null |
2019-12-04 19:00:00.000000000 |
123456782 |
ケンワース |
W900 |
[Alpha] (アルファ) |
150 |
1,000 |
ロケーション |
null |
40.7128 度 N、74.0060 度 W |
クエリの例
フリート内の各トラックでモニタリングされているすべてのセンサー属性と値のリストを取得します。
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 )
過去 1 週間の各トラックの平均積載量と最大速度を求めます。
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
過去 1 週間の各トラックの負荷効率を取得します。
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