Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Requêtes avec fonctions d'agrégation
Vous trouverez ci-dessous un exemple de jeu de données pour un scénario IoT illustrant des requêtes avec des fonctions agrégées.
Exemple de données
Timestream vous permet de stocker et d'analyser les données des capteurs IoT telles que l'emplacement, la consommation de carburant, la vitesse et la capacité de charge d'une ou de plusieurs flottes de camions afin de permettre une gestion efficace de la flotte. Vous trouverez ci-dessous le schéma et certaines des données d'une table iot_trucks qui stocke des données télémétriques telles que l'emplacement, la consommation de carburant, la vitesse et la capacité de charge des camions.
Heure | truck_id | Marque | Modèle | Flotte | capacité_carburant | capacité_charge | nom_mesure | valeur_mesure : double | valeur_mesure : varchar |
---|---|---|---|---|---|---|---|---|---|
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha |
100 |
500 |
lecture de carburant |
65,2 |
null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha |
100 |
500 |
charge |
400,0 |
null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha |
100 |
500 |
speed |
90,2 |
null |
2019-12-04 19:00:00.000 000000 |
123456781 |
GMC |
Astro |
Alpha |
100 |
500 |
location |
null |
47,6062 M, 122,3321 W |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W900 |
Alpha |
150 |
1 000 |
lecture de carburant |
10.1 |
null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W900 |
Alpha |
150 |
1 000 |
charge |
950,3 |
null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W900 |
Alpha |
150 |
1 000 |
speed |
50,8 |
null |
2019-12-04 19:00:00.000 000000 |
123456782 |
Kenworth |
W900 |
Alpha |
150 |
1 000 |
location |
null |
40,7128 degrés N, 74,0060 degrés W |
Exemples de requêtes
Obtenez une liste de tous les attributs et valeurs des capteurs surveillés pour chaque camion de la flotte.
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
Obtenez le dernier relevé de consommation de carburant de chaque camion de la flotte au cours des dernières 24 heures.
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
Identifiez les camions qui ont consommé peu de carburant (moins de 10 %) au cours des dernières 48 heures :
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 )
Trouvez la charge moyenne et la vitesse maximale de chaque camion au cours de la semaine écoulée :
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
Découvrez l'efficacité de chargement de chaque camion au cours de la semaine écoulée :
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