Utilizzate i dati relativi al timestamp - Amazon Athena

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 tipoDATE, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel ISO formato YYYY-MM-DD o un tipo di data integrato come quelli per Parquet o. ORC

  • Se hai una colonna di tipo tabellaTIME, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel ISO formato HH:MM:SS o un tipo di ora integrato come quelli per Parquet o. ORC

  • Se hai una colonna di tabella di tipoTIMESTAMP, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa nel formato YYYY-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 AND end_time AND event_date BETWEEN start_time_date AND end_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 AND end_time

Per ulteriori informazioni, consulta Crea tabelle Iceberg.