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à.
Come scegliere le chiavi di partizione
È possibile specificare in che modo la proiezione delle partizioni mappa le posizioni delle partizioni alle chiavi di partizione. Nell'esempio CREATE TABLE
nella sezione precedente, la data e l'ora sono state combinate in una chiave di partizione chiamata datehour, ma sono possibili altri schemi. Ad esempio, è possibile configurare una tabella con chiavi di partizione separate per l'anno, il mese, il giorno e l'ora.
Tuttavia, la suddivisione delle date in anno, mese e giorno significa che il tipo di proiezione della partizione date
non può essere utilizzato. Un'alternativa consiste nel separare la data dall'ora per sfruttare comunque il tipo di proiezione della partizione date
, ma rendere più facili da leggere le query che specificano gli intervalli di ore.
Ricordando questo, nell'esempio CREATE TABLE
seguente la data viene separata dall'ora. Poiché date
è una parola riservataSQL, nell'esempio viene utilizzata day
come nome la chiave di partizione che rappresenta la data.
CREATE EXTERNAL TABLE my_ingested_data2 ( ... ) ... PARTITIONED BY ( day STRING, hour INT ) LOCATION "s3://amzn-s3-demo-bucket/
prefix
/" TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.format" = "yyyy/MM/dd", "projection.day.range" = "2021/01/01,NOW", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "projection.hour.type" = "integer", "projection.hour.range" = "0,23", "projection.hour.digits" = "2", "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix
/${day}/${hour}/" )
Nell'istruzione CREATE TABLE
di esempio, l'ora è una chiave di partizione separata configurata come numero intero. La configurazione per la chiave di partizione dell'ora specifica l'intervallo da 0 a 23 e che l'ora deve essere formattata con due cifre quando Athena genera le posizioni della partizione.
Una query per la tabella my_ingested_data2
potrebbe essere simile alla seguente:
SELECT * FROM my_ingested_data2 WHERE day = '2021/11/09' AND hour > 3
Comprendi la chiave di partizione e i tipi di dati di proiezione della partizione
Tieni presente che la chiave datehour
nel primo esempio CREATE TABLE
è configurata come date
nella configurazione di proiezione della partizione, ma il tipo di chiave di partizione è string
. Lo stesso vale per day
nel secondo esempio. I tipi nella configurazione di proiezione delle partizioni indicano ad Athena soltanto come formattare i valori quando vengono generate le posizioni della partizione. I tipi specificati non modificano il tipo di chiave di partizione, nelle query, datehour
e day
sono di tipo string
.
Quando una query include una condizione come day = '2021/11/09'
, Athena analizza la stringa sul lato destro dell'espressione utilizzando il formato data specificato nella configurazione di proiezione della partizione. Una volta che Athena ha verificato che la data rientra nell'intervallo configurato, utilizza nuovamente il formato della data per inserire la data come stringa nel modello di posizione di archiviazione.
Allo stesso modo, per una condizione di query come day > '2021/11/09'
, Athena analizza il lato destro e genera un elenco di tutte le date corrispondenti all'interno dell'intervallo configurato. Viene quindi utilizzato il formato della data per inserire ogni data nel modello di posizione di archiviazione per creare l'elenco delle posizioni delle partizioni.
Scrivi la stessa condizione come day > '2021-11-09'
altrimenti day >
DATE '2021-11-09'
non funzionerà. Nel primo caso, il formato della data non corrisponde (notare i trattini anziché le barre) mentre nel secondo caso i tipi di dati non corrispondono.