Je rencontre de réels problèmes pour accéder à la fenêtre AWS IoT Analytics Delta ( docs ) pour travailler.
J'essaie de le configurer pour qu'une requête soit exécutée chaque jour pour obtenir la dernière heure de données uniquement. Selon la documentation, la fonction planning peut être utilisée pour exécuter la requête en utilisant une expression cron (dans mon cas toutes les heures) et la fenêtre delta devrait restreindre ma requête à inclure uniquement enregistrements qui sont dans la fenêtre de temps spécifiée (dans mon cas, la dernière heure).
La requête SQL que j'exécute est simplement SELECT * FROM dev_iot_analytics_datastore et si je n'inclus toute fenêtre delta j'obtiens les enregistrements comme prévu. Malheureusement, lorsque j'inclus une expression delta, je n'obtiens rien (jamais). J'ai laissé les données s'accumuler pendant environ 10 jours maintenant, il y a donc quelques millions d'enregistrements dans la base de données. Étant donné que je ne savais pas quel serait le format optimal, j'ai inclus les champs temporels suivants dans les entrées:
from_unixtime(timestamp_sec) from_unixtime(timestamp_milli) cast(from_unixtime(unixtime_sec) as date) cast(from_unixtime(unixtime_milli) as date) date_format(from_unixtime(timestamp_sec), '%Y-%m-%dT%h:%i:%s') date_format(from_unixtime(timestamp_milli), '%Y-%m-%dT%h:%i:%s') from_iso8601_timestamp(datetime)
Il y a aussi une valeur ajoutée automatiquement par AWS appelée __dt qui est un utilise le même format que mon datetime sauf qu'il semble être précis à moins d'un jour. c'est-à-dire que toutes les valeurs saisies dans un jour donné ont la même valeur (par exemple 2019-05-15 00: 00: 00.00 )
J'ai essayé une gamme d'expressions (y compris les suggestions Expression AWS) à la fois de SQL standard et de Presto car je ne suis pas sûr de celui qui est utilisé pour cette requête. Je sais qu'ils utilisent un sous-ensemble de Presto pour l'analyse, il est donc logique qu'ils l'utilisent pour le delta, mais la documentation dit simplement « ... toute expression SQL valide ».
Expressions que j'ai essayées jusqu'à présent sans succès:
datetime : 2019-05-15T01:29:26.509 (A string formatted using ISO Local Date Time) timestamp_sec : 1557883766 (A unix epoch expressed in seconds) timestamp_milli : 1557883766509 (A unix epoch expressed in milliseconds)
3 Réponses :
Quels sont les paramètres d'expressions de décalage et d'heure que vous utilisez?
Les fenêtres delta étant en fait des filtres insérés dans votre SQL, vous pouvez les résoudre en insérant manuellement l'expression de filtre dans la requête de votre ensemble de données.
À savoir, l'application d'un filtre de fenêtre delta avec un décalage de -3 minutes (négatif) et une expression d'heure 'from_unixtime (my_timestamp)' à une requête 'SELECT my_field FROM my_datastore' se traduit par une requête équivalente:
SELECT my_field FROM
(SELECT * FROM "my_datastore" WHERE
(__dt between date_trunc('day', iota_latest_succeeded_schedule_time() - interval '1' day)
and date_trunc('day', iota_current_schedule_time() + interval '1' day)) AND
iota_latest_succeeded_schedule_time() - interval '3' minute < from_unixtime(my_timestamp) AND
from_unixtime(my_timestamp) <= iota_current_schedule_time() - interval '3' minute)
Essayez d'utiliser une requête similaire (sans filtre temporel delta) avec des valeurs correctes pour le décalage et l'expression temporelle et voyez ce que vous obtenez, Le (_dt entre ...) est juste une optimisation pour limiter les partitions analysées . Vous pouvez le supprimer à des fins de dépannage.
Salut Roger, je m'attendais à ce que le delta soit construit dans une requête SQL. Cette requête génère la dernière heure de données. SELECT * FROM dev_iot_analytics_datastore WHERE __dt> = current_date - intervalle '1' jour AND from_unixtime (timestamp)> current_timestamp - intervalle '1' heure . Cependant, cela ne semble pas fonctionner lorsqu'il est ajouté à l'expression de fenêtre delta.
Veuillez essayer ce qui suit:
SELECT * FROM dev_iot_analytics_datastore Delta time from_unixtime(timestamp_sec) Après plusieurs semaines de tests et d'essais de toutes les suggestions de cet article, ainsi que de bien d'autres, il semble que la réponse extrêmement technique était de «éteindre et rallumer». J'ai supprimé toute la pile d'analyse et tout reconstruit avec des noms différents et cela semble maintenant fonctionner!
Il est important que même si je l'ai signalé comme la bonne réponse en raison de la résolution réelle. Les deux réponses fournies par @Populus et @Roger sont corrects si mon déploiement fonctionnait comme prévu.