Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Im Folgenden finden Sie einen Beispieldatensatz für ein IoT-Szenario zur Veranschaulichung von Abfragen mit Aggregatfunktionen.
Beispiel für Daten
Mit Timestream können Sie IoT-Sensordaten wie Standort, Kraftstoffverbrauch, Geschwindigkeit und Ladekapazität einer oder mehrerer LKW-Flotten speichern und analysieren, um ein effektives Flottenmanagement zu ermöglichen. Im Folgenden finden Sie das Schema und einige Daten einer Tabelle iot_trucks, in der Telemetriedaten wie Standort, Kraftstoffverbrauch, Geschwindigkeit und Ladekapazität von Lkw gespeichert werden.
Zeit | truck_id | Marke | Modell | Flotte | Treibstoffkapazität | Ladekapazität | measure_name | Messwert::doppelt | Messwert::varchar |
---|---|---|---|---|---|---|---|---|---|
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha (Alpha) |
100 |
500 |
Treibstoff auslesen |
65,2 |
Null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha (Alpha) |
100 |
500 |
load |
400,0 |
Null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha (Alpha) |
100 |
500 |
speed |
90,2 |
Null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha (Alpha) |
100 |
500 |
location |
Null |
47,6062 N, 122,3321 W |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W 900 |
Alpha (Alpha) |
150 |
1000 |
Auslesen von Treibstoff |
10.1 |
Null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W 900 |
Alpha (Alpha) |
150 |
1000 |
load |
950,3 |
Null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W 900 |
Alpha (Alpha) |
150 |
1000 |
speed |
50,8 |
Null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W 900 |
Alpha (Alpha) |
150 |
1000 |
location |
Null |
40,7128 Grad N, 74,0060 Grad W |
Beispielabfragen
Rufen Sie eine Liste aller Sensorattribute und -werte ab, die für jeden Lkw in der Flotte überwacht werden.
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
Rufen Sie die neuesten Kraftstoffwerte für jeden Lkw in der Flotte in den letzten 24 Stunden ab.
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
Identifizieren Sie Lkw, die in den letzten 48 Stunden mit wenig Kraftstoff (weniger als 10%) gefahren sind:
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
)
Finden Sie die Durchschnittslast und die Höchstgeschwindigkeit für jeden Lkw in der letzten Woche heraus:
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
Ermitteln Sie die Ladeeffizienz für jeden Lkw in der letzten Woche:
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