Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Travailler avec des données d'horodatage

Mode de mise au point
Travailler avec des données d'horodatage - Amazon Athena

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.

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.

Cette section décrit certaines considérations relatives à l'utilisation des données d'horodatage dans Athena.

Note

Le traitement des horodatages a quelque peu changé entre les versions précédentes du moteur et la version 3 du moteur Athena. Pour plus d'informations sur les erreurs liées à l'horodatage qui peuvent se produire dans la version 3 du moteur Athena et sur les solutions proposées, consultez Modifications d'horodatage dans la référence Version 3 du moteur Athena.

Format pour écrire des données d'horodatage dans des objets Amazon S3

Le format dans lequel les données d'horodatage doivent être écrites dans les objets Amazon S3 dépend à la fois du type de données de colonne et de la SerDebibliothèque que vous utilisez.

  • Si vous avez une colonne de table de type DATE, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au format ISO YYYY-MM-DD ou un type de date intégré comme ceux de Parquet ou ORC.

  • Si vous avez une colonne de table de type TIME, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au format ISO HH:MM:SS ou un type d'heure intégré comme ceux de Parquet ou ORC.

  • Si vous avez une colonne de table de type TIMESTAMP, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au format YYYY-MM-DD HH:MM:SS.SSS (notez l'espace entre la date et l'heure) ou un type d'heure intégré comme ceux de Parquet, ORC ou Ion. Notez qu'Athena ne garantit pas le comportement des horodatages non valides (par exemple,). 0000-00-00 08:00:00.000

    Note

    Les horodatages Open CSVSer De constituent une exception et doivent être codés en tant qu'époques UNIX de résolution en millisecondes.

S'assurer que les données partitionnées dans le temps correspondent au champ d'horodatage d'un enregistrement

Le producteur des données doit s'assurer que les valeurs de partition correspondent aux données contenues dans la partition. Par exemple, si vos données ont une timestamp propriété et que vous utilisez Firehose pour les charger dans Amazon S3, vous devez utiliser le partitionnement dynamique car le partitionnement par défaut de Firehose est le suivant. wall-clock-based

Utiliser STRING comme type de données pour les clés de partition

Pour des raisons de performances, il est préférable d'utiliser STRING comme type de données pour les clés de partition. Même si Athena reconnaît les valeurs de partition au format YYYY-MM-DD comme des dates lorsque vous utilisez le type DATE, cela peut entraîner de mauvaises performances. Pour cette raison, nous vous recommandons d'utiliser plutôt le type de données STRING pour les clés de partition.

Comment écrire des requêtes pour des champs d'horodatage qui sont également partitionnés dans le temps

La façon dont vous rédigez les requêtes pour les champs d'horodatage partitionnés dans le temps dépend du type de table que vous souhaitez interroger.

Tables Hive

Avec les tables Hive les plus couramment utilisées dans Athena, le moteur de requête n'a aucune connaissance des relations entre les colonnes et les clés de partition. Pour cette raison, vous devez toujours ajouter des prédicats dans vos requêtes pour la colonne et pour la clé de partition.

Supposons, par exemple, que vous disposiez d'une colonne event_time et d'une clé de partition event_date et que vous souhaitiez interroger des événements survenus entre 23 h 00 et 03 h 00. Dans ce cas, vous devez inclure des prédicats dans votre requête pour la colonne et pour la clé de partition, comme dans l'exemple suivant.

WHERE event_time BETWEEN start_time AND end_time AND event_date BETWEEN start_time_date AND end_time_date

Tables Iceberg

Avec les tables Iceberg, vous pouvez utiliser des valeurs de partition calculées, ce qui simplifie vos requêtes. Supposons, par exemple, que votre table Iceberg ait été créée avec une clause PARTITIONED BY comme celle-ci :

PARTITIONED BY (event_date month(event_time))

Dans ce cas, le moteur de requête réduit automatiquement les partitions en fonction des valeurs des prédicats event_time. Pour cette raison, votre requête doit uniquement spécifier un prédicat pour event_time, comme dans l'exemple suivant.

WHERE event_time BETWEEN start_time AND end_time

Pour de plus amples informations, veuillez consulter Création de tables Iceberg.

Lorsque vous utilisez le partitionnement caché d'Iceberg pour une colonne d'horodatage, Iceberg peut créer une partition sur une colonne de table construite dérivée d'une colonne d'horodatage et transformée en date pour un partitionnement plus efficace. Par exemple, il peut être créé event_date à partir de la colonne d'horodatage event_time et partitionner automatiquement. event_date Dans ce cas, le type de partition est une date.

Pour des performances de requête optimales lorsque vous utilisez la partition, filtrez sur des plages de jours complets pour activer le transfert des prédicats vers le bas. Par exemple, la requête suivante ne sera pas repoussée vers le bas car la plage ne peut pas être convertie en une seule partition de date, même si elle se situe en un jour :

WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-18 12:00:00'

Utilisez plutôt une plage de jours complète pour autoriser le transfert des prédicats et améliorer les performances des requêtes, comme dans l'exemple suivant.

WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-19 00:00:00'

Vous pouvez également utiliser la BETWEEN start_time AND end_time syntaxe ou utiliser les plages de plusieurs jours, à condition que les parties d'horodatage le soient. 00:00:00

Pour plus d'informations, consultez le billet de blog de Trino.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.