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à.
Tipi di dati in Amazon Athena
Quando si esegueCREATE TABLE
, si specificano i nomi delle colonne e il tipo di dati che ogni colonna può contenere. Le tabelle create vengono archiviate in AWS Glue Data Catalog.
Per facilitare l'interoperabilità con altri motori di query, Athena utilizza i nomi dei tipi di dati Apache HiveCREATE TABLE
Per le query DML comeSELECT
, eCTAS
, INSERT INTO
Athena utilizza i nomi dei tipi di dati Trino
DDL | DML | Descrizione |
---|---|---|
BOOLEAN | I valori validi sono true e false . |
|
TINYINT | Un intero con segno a 8 bit in formato complementare a due, con un valore minimo di -2 7 e un valore massimo di 2 7 -1. | |
SMALLINT | Un intero con segno a 16 bit in formato complementare a due, con un valore minimo di -2 15 e un valore massimo di 2 15 -1. | |
INT, INTEGER | Un valore con segno a 32 bit in formato complementare a due, con un valore minimo di -2 31 e un valore massimo di 2 31 -1. | |
BIGINT | Un intero con segno a 64 bit in formato complemento a due, con un valore minimo di -2 63 e un valore massimo di 2 63 -1. | |
FLOAT | REAL | Un numero a virgola mobile a precisione singola firmato a 32 bit. L'intervallo è compreso tra 1,40129846432481707e-45 e 3,40282346638528860e+38, positivo o negativo. Segue lo standard IEEE per l'aritmetica a virgola mobile (IEEE 754). |
DOUBLE | Un numero a virgola mobile a doppia precisione firmato a 64 bit. L'intervallo è compreso tra 4,94065645841246544e-324d e 1,79769313486231570e+308d, positivo o negativo. Segue lo standard IEEE per l'aritmetica a virgola mobile (IEEE 754). | |
(precisione, scala) |
è il numero totale di cifre. (opzionale) è il numero di cifre nella parte frazionaria con un valore predefinito di 0. Ad esempio, è possibile usare il tipo di queste definizioni: decimal(11,5) , decimal(15) . Il valore massimo per la precisione è 38 mentre il valore massimo per la scala è 38. |
|
CHAR, CHAR (lunghezza) |
Dati di caratteri a lunghezza fissa, con una lunghezza specificata compresa tra 1 e 255, come char (10). Se viene specificata la Per ulteriori informazioni, consulta la sezione relativa a tipo di dati Hive CHAR |
|
STRING | VARCHAR | Dati di caratteri a lunghezza variabile. |
VARCHAR (lunghezza) |
Dati di caratteri a lunghezza variabile con una lunghezza massima di lettura. Le stringhe vengono troncate alla lunghezza specificata durante la lettura. Se la stringa di dati sottostante è più lunga, la stringa di dati sottostante rimane invariata. | |
BINARY | VARBINARY | Dati binari a lunghezza variabile. |
TIME | Un'ora del giorno con precisione al millisecondo. | |
Non disponibile | ORA (precisione) |
Un'ora del giorno con una precisione specifica. TIME(3) è equivalente aTIME . |
Non disponibile | TIME WITH TIME ZONE | Un'ora del giorno in un fuso orario. I fusi orari devono essere specificati come offset rispetto all'UTC. |
DATE | Una data di calendario con anno, mese e giorno. | |
TIMESTAMP | TIMESTAMP, TIMESTAMP SENZA FUSO ORARIO | Data e ora del giorno del calendario con precisione al millisecondo. |
Non disponibile | TIMESTAMP ( |
Una data e un'ora del giorno del calendario con una precisione specifica. TIMESTAMP(3) è equivalente aTIMESTAMP . |
Non disponibile | TIMESTAMP WITH TIME ZONE | Data e ora del giorno del calendario in un fuso orario. I fusi orari possono essere specificati come offset rispetto all'UTC, come nomi di fusi orari IANA o utilizzando UTC, UT, Z o GMT. |
Non disponibile | TIMESTAMP (PRECISIONE) CON FUSO ORARIO |
Una data e un'ora del giorno del calendario con una precisione specifica, in un fuso orario. |
Non disponibile | INTERVAL YEAR TO MONTH | Un intervallo di uno o più mesi interi |
Non disponibile | INTERVAL DAY TO SECOND | Un intervallo di uno o più secondi, minuti, ore o giorni |
ARRAY< element_type > |
ARRAY [tipo_elemento] |
Una matrice di valori. Tutti i valori devono avere lo stesso tipo. |
MAP< |
|
Una mappa in cui è possibile cercare i valori per chiave. Tutte le chiavi devono avere lo stesso valore e tutti i valori devono avere lo stesso valore. |
|
|
Una struttura di dati con campi denominati e relativi valori. |
Non disponibile | JSON | Tipo di valore JSON, che può essere un oggetto JSON, un array JSON, un numero JSON, una stringa JSON o. true false null |
Non disponibile | UUID | Un UUID (Identificatore univoco universale). |
Non disponibile | INDIRIZZO IP | Un indirizzo IPv4 o IPv6. |
Non disponibile | HyperLogLog |
Questi tipi di dati supportano funzioni interne approssimative. Per ulteriori informazioni su ciascun tipo, visita il link alla voce corrispondente nella documentazione di Trino. |
P4 HyperLogLog |
||
SetDigest |
||
QDigest |
||
TDigest |
Esempi di tipi di dati
La tabella seguente mostra esempi di valori letterali per i tipi di dati DML.
Tipo di dati | Esempi |
---|---|
BOOLEAN |
|
TINYINT |
|
SMALLINT |
|
INT, INTEGER |
|
BIGINT |
|
REAL |
|
DOUBLE |
|
|
|
CHAR, CHAR (lunghezza) |
|
VARCHAR, VARCHAR (lunghezza) |
|
VARBINARY |
|
TEMPO, TEMPO (precisione) |
|
TIME WITH TIME ZONE |
|
DATE |
|
|
|
TIMESTAMP CON FUSO ORARIO, TIMESTAMP (PRECISIONE) CON FUSO ORARIO |
|
INTERVAL YEAR TO MONTH |
|
INTERVAL DAY TO SECOND |
|
ARRAY [tipo_elemento] |
|
MAP ( |
Nota che le mappe vengono create da una matrice di chiavi e da una matrice di valori. |
|
Nota che le righe create in questo modo non hanno nomi di colonna. Per aggiungere nomi di colonna, puoi usare
|
JSON |
|
UUID |
|
INDIRIZZO IP |
|
Considerazioni sui tipi di dati
Limiti di dimensione
Per i tipi di dati che non specificano un limite di dimensione, tieni presente che esiste un limite pratico di 32 MB per tutti i dati in una singola riga. Per ulteriori informazioni, consulta Row or column size limitation in Considerazioni e limitazioni per le SQL query in Amazon Athena.
CHAR e VARCHAR
Un CHAR(
valore ha sempre un numero di caratteri. n
)
Ad esempio, se si trasmette 'abc' an
CHAR(7)
, vengono aggiunti 4 spazi finali.
I confronti di CHAR
valori includono spazi iniziali e finali.
Se viene specificata una lunghezza per CHAR
oVARCHAR
, le stringhe vengono troncate alla lunghezza specificata durante la lettura. Se la stringa di dati sottostante è più lunga, la stringa di dati sottostante rimane invariata.
Per evitare una virgoletta singola in una CHAR
oVARCHAR
, usa una virgoletta singola aggiuntiva.
Per eseguire il cast di un tipo di dati non stringa in una stringa in una query DML, VARCHAR
esegui il cast sul tipo di dati.
Per utilizzare la substr
funzione per restituire una sottostringa di lunghezza specificata da un tipo di CHAR
dati, dovete prima eseguire il cast del CHAR
valore come. VARCHAR
Nell'esempio seguente, col1
utilizza il tipo di CHAR
dati.
substr(CAST(col1 AS VARCHAR), 1, 4)
DECIMAL
Per specificare i valori decimali come valori letterali nelle SELECT
query, ad esempio quando si selezionano righe con un valore decimale specifico, è possibile specificare il DECIMAL
tipo ed elencare il valore decimale come letterale tra virgolette singole nella query, come negli esempi seguenti.
SELECT * FROM my_table WHERE decimal_value = DECIMAL '0.12'
SELECT DECIMAL '44.6' + DECIMAL '77.2'
Utilizzo dei dati con 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 in formatoYYYY-MM-DD
ISO o un tipo di data integrato come quelli per Parquet o ORC. -
Se hai una colonna di tabella di tipo
TIME
, Athena si aspetta che la colonna o la proprietà corrispondente dei dati sia una stringa in formatoHH:MM:SS
ISO 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, ORC o Ion.Nota
I timestamp SerDe OpenCSV sono un'eccezione e devono essere codificati come epoche UNIX con risoluzione in millisecondi.
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 Creazione di tabelle Iceberg.