Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzate i dati relativi al timestamp
Questa sezione descrive alcune considerazioni sull'utilizzo dei dati con timestamp in Athena.
Nota
Il trattamento dei timestamp è leggermente cambiato tra la versione 2 e la versione 3 del motore Athena. Per informazioni sugli errori relativi ai timestamp che possono verificarsi nella versione 3 del motore Athena e sulle soluzioni suggerite, consultare Modifiche al timestamp nei riferimenti Versione 3 del motore Athena.
Formato per la scrittura di dati timestamp su oggetti Amazon S3
Il formato in cui i dati timestamp devono essere scritti negli oggetti Amazon S3 dipende sia dal tipo di dati della colonna che SerDedalla libreria utilizzata.
-
Se hai una colonna di tabella di tipo
DATE
, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel ISO formatoYYYY-MM-DD
o un tipo di data integrato come quelli per Parquet o. ORC -
Se hai una colonna di tipo tabella
TIME
, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel ISO formatoHH:MM:SS
o un tipo di ora integrato come quelli per Parquet o. ORC -
Se hai una colonna di tabella di tipo
TIMESTAMP
, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel formatoYYYY-MM-DD HH:MM:SS.SSS
(nota lo spazio tra la data e l'ora) o un tipo di ora integrato come quelli per Parquet o IonORC. Nota che Athena non garantisce il comportamento per i timestamp non validi (ad esempio,).0000-00-00 08:00:00.000
Nota
I timestamp O penCSVSer De sono un'eccezione e devono essere codificati come epoche con risoluzione in millisecondi. UNIX
Come garantire che i dati partizionati nel tempo corrispondano al campo timestamp di un record
Il produttore dei dati deve assicurarsi che i valori della partizione siano allineati con i dati all'interno della partizione. Ad esempio, se i dati hanno una timestamp
proprietà e si utilizza Firehose per caricare i dati in Amazon S3, è necessario utilizzare il partizionamento dinamico perché il partizionamento predefinito di Firehose è. wall-clock-based
Usa string come tipo di dati per le chiavi di partizione
Per motivi di prestazioni, è preferibile utilizzare STRING
come tipo di dati per le chiavi di partizione. Anche se Athena riconosce i valori delle partizioni nel formato YYYY-MM-DD
come date quando si utilizza il tipo DATE
, ciò può portare a prestazioni scadenti. Per questo motivo, si consiglia di utilizzare invece il tipo di dati STRING
per le chiavi di partizione.
Come scrivere query per campi timestamp che sono anche partizionati in base all'ora
Il modo in cui si scrivono le query per i campi di indicazione temporale che sono partizionati in base all'ora dipende dal tipo di tabella su cui si intende eseguire la query.
Tavoli Hive
Con le tabelle Hive più comunemente utilizzate in Athena, il motore di query non conosce le relazioni tra colonne e chiavi di partizione. Per questo motivo, devi sempre aggiungere predicati nelle tue query sia per la colonna che per la chiave di partizione.
Ad esempio, supponi di avere una colonna event_time
e una chiave di partizione event_date
e di voler eseguire query sugli eventi tra le 23:00 e le 03:00. In questo caso, è necessario includere i predicati nella query sia per la colonna che per la chiave di partizione, come nell'esempio seguente.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Tavoli Iceberg
Con le tabelle Iceberg, puoi utilizzare valori di partizione calcolati, il che semplifica le tue query. Ad esempio, supponiamo che la tabella Iceberg sia stata creata con una clausola come la seguente: PARTITIONED BY
PARTITIONED BY (event_date month(event_time))
In questo caso, il motore di query elimina automaticamente le partizioni in base ai valori dei predicati event_time
. Per questo motivo, la query deve solo specificare un predicato per event_time
, come nell'esempio seguente.
WHERE event_time BETWEEN
start_time
ANDend_time
Per ulteriori informazioni, consulta Crea tabelle Iceberg.