Versione 2 del motore Athena - 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à.

Versione 2 del motore Athena

La versione 2 del motore Athena introduce le seguenti modifiche.

Miglioramenti e nuove funzioni

  • EXPLAINe EXPLAINANALYZE— È possibile utilizzare l'EXPLAINistruzione in Athena per visualizzare il piano di esecuzione delle query. SQL Utilizza EXPLAIN ANALYZE per visualizzare il piano di esecuzione distribuito per le tue SQL query e il costo di ogni operazione. Per ulteriori informazioni, consulta Usare EXPLAIN e EXPLAIN ANALYZE in Athena.

  • Query federate— Le query federate sono supportate nella versione 2 del motore Athena. Per ulteriori informazioni, consulta Usa Amazon Athena Federated Query.

  • Funzioni geospaziali— Sono state aggiunte più di 25 funzioni geospaziali. Per ulteriori informazioni, consulta Nuove funzioni geospaziali nella versione 2 del motore Athena.

  • Schema nidificato— È stato aggiunto il supporto per la lettura dello schema nidificato, che riduce i costi.

  • Istruzioni preparate: utilizzare le istruzioni preparate per l'esecuzione ripetuta della stessa query con parametri di query diversi. Un'istruzione preparata contiene parametri segnaposto i cui valori vengono passati in fase di runtime. Le dichiarazioni preparate aiutano a prevenire gli attacchi SQL di iniezione. Per ulteriori informazioni, consulta Usa interrogazioni parametrizzate.

  • Supporto dell'evoluzione dello schema— È stato aggiunto il supporto dell'evoluzione dello schema per i dati in formato Parquet.

    • Aggiunto il supporto per la lettura di colonne di tipo array, mappa o riga da partizioni in cui lo schema di partizione è diverso dallo schema della tabella. Ciò può verificarsi quando lo schema della tabella è stato aggiornato dopo la creazione della partizione. I tipi di colonna modificati devono essere compatibili. Per i tipi di riga, i campi finali possono essere aggiunti o eliminati, ma i campi corrispondenti (in ordine ordinale) devono avere lo stesso nome.

    • ORCi file possono ora avere colonne strutturali con campi mancanti. Ciò consente di modificare lo schema della tabella senza riscrivere i ORC file.

    • ORCle colonne struct sono ora mappate per nome anziché per numero ordinale. Questo gestisce correttamente i campi struct mancanti o aggiuntivi nel ORC file.

  • SQLOFFSET— La SQL OFFSET clausola è ora supportata nelle SELECT dichiarazioni. Per ulteriori informazioni, consulta SELECT.

  • UNLOADistruzione: è possibile utilizzare l'UNLOADistruzione per scrivere l'output di una SELECT query nei JSON formati PARQUETORC,AVRO, e. Per ulteriori informazioni, consulta UNLOAD.

Miglioramenti a raggruppamento, unione e sottoquery

  • Raggruppamento complesso— Aggiunto il supporto per operazioni di raggruppamento complesse.

  • Sottoquery correlate— Aggiunto il supporto per le sottoquery correlate inIN e per sottoquery correlate che richiedono costrizioni.

  • CROSSJOIN— È stato aggiunto il supporto CROSS JOIN per le tabelle LATERAL derivate.

  • GROUPINGSETS— È stato aggiunto il supporto per le ORDER BY clausole nelle aggregazioni per le query che utilizzano. GROUPING SETS

  • Lambda expressions — Aggiunto il supporto per il dereferenziamento dei campi riga nelle espressioni Lambda.

  • Null values in semijoins — Aggiunto il supporto per i valori nulli sul lato sinistro di un semijoin (ovvero un predicato IN con sottoquery).

  • Spatial joins — Aggiunto il supporto per i join spaziali di trasmissione e i join spaziali di sinistra.

  • Spill to disk — Per operazioni INNER JOIN e LEFT JOIN con uso intensivo di memoria, Athena scarica i risultati delle operazioni intermedie su disco. Ciò consente l'esecuzione di query che richiedono grandi quantità di memoria.

  • INTper INTEGER: è stato aggiunto il supporto come INT alias per il tipo di dati. INTEGER

  • INTERVALtipi: è stato aggiunto il supporto per il casting ai INTERVAL tipi.

  • IPADDRESS— Aggiunto un nuovo IPADDRESS tipo per rappresentare gli indirizzi IP nelle DML query. Aggiunto il supporto per il casting tra il tipo VARBINARY e IPADDRESS. Il IPADDRESS tipo non è riconosciuto nelle DDL query.

  • IS DISTINCTFROM: è stato aggiunto IS DISTINCT FROM il supporto per i IPADDRESS tipi JSON e.

  • Null equality checks — Verifica di uguaglianza per valori nulli in ARRAY, MAP eROW. Sono ora supportate le strutture dati. Ad esempio, l'espressione ARRAY ['1', '3', null] = ARRAY ['1', '2', null] restituisce false. In precedenza, un elemento null restituiva il messaggio di errore Confronto non supportato.

  • Row type coercion — È ora consentita la coercizione tra i tipi di riga indipendentemente dai nomi dei campi. In precedenza, un tipo di riga era coercibile a un altro solo se il nome del campo nel tipo di origine corrispondeva al tipo di destinazione o quando il tipo di destinazione aveva un nome di campo anonimo.

  • Time subtraction — Sottrazione implementata per tutti i tipi TIME e TIMESTAMP.

  • Unicode — Aggiunto il supporto per le sequenze Unicode con escape nelle stringhe letterali.

  • VARBINARYconcatenazione: è stato aggiunto il supporto per la concatenazione di valori. VARBINARY

    Funzioni del valore finestra: le funzioni del valore finestra ora supportano IGNORE NULLS e RESPECT NULLS.

Tipi di input aggiuntivi per le funzioni

Le seguenti funzioni ora accettano tipi di input aggiuntivi. Per ulteriori informazioni su ciascuna funzione, visita il link corrispondente alla documentazione di Presto.

  • approx_distinct() – La funzione approx_distinct() supporta ora i seguenti tipi: INTEGER, SMALLINT, TINYINT, DECIMAL, REAL, DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIME, TIME WITH TIME ZONE, IPADDRESS e CHAR.

  • avg(), sum() – Le funzioni di aggregazione avg() e sum() ora supportano il tipo di dati INTERVAL.

  • lpad(), rpad() – Le funzioni lpad e rpad ora funzionano sugli input VARBINARY.

  • min(), max() – Le funzioni di aggregazione min() e max() ora consentono tipi di input sconosciuti al momento dell'analisi delle query in modo da poter utilizzare le funzioni con valori letterali NULL.

  • regexp_replace()— Variante della funzione regexp_replace()aggiunta che può eseguire una funzione Lambda per ogni sostituzione.

  • sequenza ()— Aggiunte varianti DATE per la funzione sequence(), inclusa la variante con un incremento di fase implicito di un giorno.

  • ST_Area()— La funzione geospaziale ST_Area() ora supporta tutti i tipi di geometria.

  • substr() – La funzione substr ora funziona sugli input VARBINARY.

  • zip_with() – Gli array di lunghezza non corrispondente possono ora essere utilizzati con zip_with(). Le posizioni mancanti sono riempite con null. In precedenza, veniva generato un errore quando venivano passati array di lunghezze diverse. Questa modifica può rendere difficile distinguere tra valori originariamente nulli dai valori aggiunti per tamponare gli array alla stessa lunghezza.

Funzioni aggiunte

Il seguente elenco contiene le nuove funzioni disponibili a partire dalla versione 2 del motore Athena. L'elenco non include funzioni geospaziali. Per un elenco delle funzioni geospaziali, consulta Nuove funzioni geospaziali nella versione 2 del motore Athena.

Per ulteriori informazioni su ciascuna funzione, visita il link corrispondente alla documentazione di Presto.

Funzioni di aggregazione

reduce_agg()

Operatori e funzioni della matrice

array_sort(): variante di questa funzione aggiunta che prende una funzione Lambda come comparatore.

ngrams()

Funzioni binarie e operatori

from_big_endian_32()

from_ieee754_32()

from_ieee754_64()

hmac_md5()

hmac_sha1()

hmac_sha256()

hmac_sha512()

spooky_hash_v2_32()

spooky_hash_v2_64()

to_big_endian_32()

to_ieee754_32()

to_ieee754_64()

Operatori e funzioni data e ora

millisecondi()

parse_duration()

to_milliseconds()

Operatori e funzioni mappa

multimap_from_entries()

Operatori e funzioni matematiche

inverse_normal_cdf()

wilson_interval_lower()

wilson_interval_upper()

Funzioni di digest quantile

Aggiunti funzioni digest quantile e il tipo digest quantile qdigest.

Operatori e funzioni di stringa

hamming_distance()

split_to_multimap()

Miglioramenti in termini di prestazioni.

Le prestazioni delle seguenti caratteristiche sono migliorate nella versione 2 del motore Athena.

Prestazioni delle query

  • Prestazioni broadcast join: miglioramento delle prestazioni broadcast join applicando l'eliminazione dinamica delle partizioni nel nodo worker.

  • Tabelle bucket — Prestazioni migliorate per la scrittura su tabelle a periodi fissi quando i dati in scrittura sono già partizionati in modo appropriato (ad esempio, quando l'output proviene da un join a periodi fissi).

  • DISTINCT— Prestazioni migliorate per alcune query che utilizzano. DISTINCT

    Filtro dinamico ed eliminazione delle partizioni: i miglioramenti apportati aumentano le prestazioni e riducono la quantità di dati scansionati nelle query.

  • Operazioni di filtraggio e proiezione — Le operazioni di filtro e proiezione sono ora sempre elaborate per colonne, se possibile. Il motore sfrutta automaticamente le codificazioni del dizionario, laddove efficace.

  • Raccolta di scambi — Prestazioni migliorate per le query con raccolta di scambi.

  • Aggregazioni globali – Prestazioni migliorate per alcune query che eseguono aggregazioni globali filtrate.

  • GROUPINGSETS,CUBE, ROLLUP — Prestazioni migliorate per le query che coinvolgono CUBE o GROUPING SETSROLLUP, che è possibile utilizzare per aggregare più set di colonne in una singola query.

  • Filtri altamente selettivi — Migliorate le prestazioni delle query con filtri altamente selettivi.

  • JOINe AGGREGATE operazioni: le prestazioni JOIN e le AGGREGATE operazioni sono state migliorate.

  • LIKE— Migliorate le prestazioni delle interrogazioni che utilizzano LIKE predicati nelle colonne delle information_schema tabelle.

  • ORDERBY and LIMIT — Piani, prestazioni e utilizzo della memoria migliorati per le query che implicano ORDER BY ed evitano scambi LIMIT di dati non necessari.

  • ORDERBY: ORDER BY le operazioni sono ora distribuite per impostazione predefinita, il che consente l'utilizzo di ORDER BY clausole più ampie.

  • ROWconversioni di tipi: prestazioni migliorate durante la conversione tra tipi. ROW

  • Tipi strutturali – Prestazioni migliorate delle query che elaborano tipi strutturali e contengono scansioni, join, aggregazioni o scritture di tabelle.

  • Scansioni delle tabelle: è stata introdotta una regola di ottimizzazione per evitare scansioni di tabelle duplicate in alcuni casi.

  • UNION— Prestazioni migliorate per le queryUNION.

Prestazioni della pianificazione delle query
  • Prestazioni di pianificazione – Prestazioni migliorate di pianificazione per query che uniscono più tabelle con un numero elevato di colonne.

  • Valutazioni di predicato — Miglioramento delle prestazioni di valutazione dei predicati durante il pushdown dei predicati nella pianificazione.

  • Supporto predicate pushdown per il casting — Supporta il predicate pushdown per il <column> IN <values list> predicato in cui i valori nell'elenco dei valori richiedono il casting per corrispondere al tipo di colonna.

  • Inferenza dei predicati e pushdown: inferenza dei predicati e pushdown estesi per le query che utilizzano un <symbol> IN <subquery> predicato.

  • Timeout: risolto un bug che in rari casi poteva causare timeout di pianificazione delle query.

Prestazioni di join

  • Unisci con colonne della mappa – Miglioramento delle prestazioni dei join e delle aggregazioni che includono colonne della mappa.

  • Unisci solo con condizioni di non uguaglianza — Migliorate le prestazioni dei join con solo condizioni di non uguaglianza utilizzando un loop join nidificato invece di un hash join.

  • Outer joins — Il tipo di distribuzione join viene ora selezionato automaticamente per le query che coinvolgono outer join.

  • Intervallo per un'unione di funzioni — Miglioramento delle prestazioni dei join in cui la condizione è un intervallo su una funzione (ad esempio, a JOIN b ON b.x < f(a.x) AND b.x > g(a.x)).

  • S pill-to-disk — Risolti bug e problemi di memoria spill-to-disk correlati per migliorare le prestazioni e ridurre gli errori di memoria nelle JOIN operazioni.

Prestazioni delle sottoquery

  • EXISTSSottoquery correlate: prestazioni migliorate delle sottoquery correlate. EXISTS

  • Sottoquery correlate con equità — Supporto migliorato per sottoquery correlate contenenti predicati di uguaglianza.

  • Sottoquery correlate con disuguaglianze correlate: prestazioni migliorate per sottoquery correlate che contengono disuguaglianze.

  • Aggregazioni count(*) su sottoquery: miglioramento delle prestazioni di aggregazioni count(*) su sottoquery con cardinalità costante nota.

  • Propagazione filtro query esterno: miglioramento delle prestazioni delle sottoquery correlate quando i filtri dalla query esterna possono essere propagate alla sottoquery.

Prestazioni delle funzioni

  • Funzioni finestra aggregate: miglioramento delle prestazioni delle funzioni finestra aggregate.

  • element_at(): miglioramento delle prestazioni di element_at() affinché le mappe siano a tempo costante piuttosto che proporzionali alle dimensioni della mappa.

  • grouping(): miglioramento delle prestazioni per query che coinvolgono grouping().

  • JSONcasting: sono state migliorate le prestazioni del casting da a o tipi. JSON ARRAY MAP

  • Funzioni di restituzione della mappa — Migliorate le prestazioni delle funzioni che restituiscono le mappe.

  • M ap-to-map casting: sono state migliorate le prestazioni del map-to-map cast.

  • min() e max() – Le funzioni min() e max() sono state ottimizzate per evitare la creazione di oggetti non necessari, riducendo così il sovraccarico di garbage collection.

  • row_number() – Miglioramento delle prestazioni e dell'utilizzo della memoria per le query utilizzando row_number() seguito da un filtro sui numeri di riga generati.

  • Funzioni finestra — Miglioramento delle prestazioni delle query contenenti funzioni di finestra con clausole PARTITION BY e ORDER BY identiche.

  • Funzioni finestra — Miglioramento delle prestazioni di alcune funzioni finestra (ad esempio,LAG) che hanno specifiche simili.

Prestazioni geospaziali

  • Serializzazione della geometria — Migliorate le prestazioni di serializzazione dei valori della geometria.

  • Funzioni geospaziali — Migliorate le prestazioni di ST_Intersects(), ST_Contains(), ST_Touches(), ST_Within(), ST_Overlaps(), ST_Disjoint(), transform_values(), ST_XMin(), ST_XMax(), ST_YMin(), ST_YMax(), ST_Crosses() e array_intersect().

  • ST_Distance() — Miglioramento delle prestazioni delle query join che coinvolgono la funzione ST_Distance().

  • ST_Intersection() – Ottimizzata la funzione ST_Intersection() per i rettangoli allineati con gli assi delle coordinate (ad esempio, i poligoni prodotti dalle funzioni ST_Envelope() e bing_tile_polygon()).

Funzioni della mappa

  • Prestazioni migliorate del pedice della mappa da O(n) a O(1) in tutti i casi. In precedenza, solo le mappe prodotte da determinate funzioni e lettori hanno beneficiato di questo miglioramento.

  • Aggiunte le funzioni map_from_entries() e map_entries().

Casting

  • Aggiunta la possibilità di eseguire il cast suJSON da REAL, TINYINT o SMALLINT.

  • È ora possibile eseguire il cast di JSON su ROW anche se JSON non contiene tutti i campi nella ROW.

  • Prestazioni migliorate di CAST(json_parse(...) AS ...).

  • Migliorate le prestazioni del casting dai tipi JSON aARRAY o MAP.

Nuove funzioni JSON

Modifiche importanti

Le modifiche di rottura includono correzioni di bug, modifiche alle funzioni geospaziali, funzioni sostituite e l'introduzione di limiti. I miglioramenti della ANSI SQL conformità possono interrompere le interrogazioni che dipendono da un comportamento non standard.

Correzioni di bug

Le seguenti modifiche correggono i problemi comportamentali che hanno causato l'esecuzione corretta delle query, ma con risultati imprecisi.

  • Le colonne parquet fixed_len_byte_array sono ora accettate come DECIMAL — Le interrogazioni sulle colonne Parquet di tipo «Parquet» hanno fixed_len_byte_array esito positivo e restituiscono valori corretti se sono annotate come nello schema Parquet. DECIMAL Le query su colonne fixed_len_byte_array senza l'annotazione DECIMAL hanno esito negativo e restituiscono un errore. In precedenza, le interrogazioni sulle colonne senza l'annotazione venivano eseguite correttamente ma restituivano valori incomprensibili. fixed_len_byte_array DECIMAL

  • json_parse() non ignora più i caratteri finali— In precedenza, input come[1,2]abc sarebbero stati analizzati come [1,2]. L'uso dei caratteri finali ora produce il messaggio di errore Cannot convert '[1, 2] abc' in. JSON

  • Precisione decimale arrotondata () corretta: round(x, d) ora arrotonda correttamente quando è a DECIMAL o x quando x è un DECIMAL con scala 0 x ed è un numero intero negativo. d In precedenza, non si verificava alcun arrotondamento in questi casi.

  • round(x, d) e truncate(x, d) –Il parametro d nella firma delle funzioni round(x, d) e truncate(x, d) è ora di tipo INTEGER. In precedenza, d poteva essere di tipo BIGINT.

  • map() con chiavi duplicatemap() ora genera un errore sulle chiavi duplicate piuttosto che produrre silenziosamente una mappa danneggiata. Le query che attualmente costruiscono valori di mappa utilizzando chiavi duplicate ora non hanno esito positivo con un errore.

  • map_from_entries() genera un errore con voci nullemap_from_entries() ora genera un errore quando l'array di input contiene una voce nulla. Le query che costruiscono una mappa trasmettendo NULL come valore ora hanno esito negativo.

  • Tabelle — Le tabelle con tipi di partizione non supportati non possono più essere create.

  • Miglioramento della stabilità numerica nelle funzioni statistiche — La stabilità numerica per le funzioni statistiche corr(), covar_samp(), regr_intercept() e regr_slope() è stata migliorata.

  • TIMESTAMPla precisione definita nel parquet è ora rispettata: ora la precisione dei TIMESTAMP valori e la precisione definita per la TIMESTAMP colonna nello schema Parquet devono corrispondere. Le precisioni non corrispondenti generano marche temporali errati.

  • Informazioni sul fuso orario: le informazioni sul fuso orario vengono ora calcolate utilizzando il pacchetto java.time di Java 1.8. SDK

  • SUMdei tipi di MONTH dati INTERVAL _ DAY _TO_ SECOND e _ INTERVAL YEAR _TO_: non è più possibile utilizzarli direttamente. SUM(NULL) Per utilizzareSUM(NULL), esegui il casting di NULL a un tipo di dati come BIGINT, DECIMAL, REAL, DOUBLE, INTERVAL_DAY_TO_SECOND o INTERVAL_YEAR_TO_MONTH.

Modifiche alle funzioni geospaziali

Le modifiche apportate alle funzioni geospaziali includono quanto segue.

  • Modifiche al nome delle funzioni — Alcuni nomi di funzioni sono cambiati. Per ulteriori informazioni, consulta Modifiche ai nomi delle funzioni geospaziali nella versione 2 del motore Athena.

  • VARBINARYinput — Il VARBINARY tipo non è più supportato direttamente per l'input alle funzioni geospaziali. Ad esempio, per calcolare direttamente l'area di una geometria, la geometria deve ora essere inserita in VARCHAR o GEOMETRY. La soluzione alternativa consiste nell'utilizzare le funzioni di trasformazione, come negli esempi seguenti.

    • Da utilizzare ST_area() per calcolare l'area di VARBINARY immissione nel formato Well-Not Binary (WKB), passa l'input a ST_GeomFromBinary() first, ad esempio:

      ST_area(ST_GeomFromBinary(<wkb_varbinary_value>))
    • Per utilizzare ST_area() per calcolare l'area per l'input VARBINARY in formato binario legacy, per prima cosa passa l'input alla funzione ST_GeomFromLegacyBinary(), ad esempio:

      ST_area(ST_GeomFromLegacyBinary(<legacy_varbinary_value>))
  • ST_ ExteriorRing () e ST_Polygon ()ST_ExteriorRing()e ST_Polygon()ora accettano solo poligoni come input. In precedenza, queste funzioni accettavano erroneamente altre geometrie.

  • ST_distance () — Come richiesto dalla specifica SQL /MM, la ST_Distance()funzione ora restituisce se uno degli input è una geometria vuota. NULL In precedenza, veniva restituito NaN.

ANSISQLconformità

I seguenti problemi di sintassi e comportamento sono stati corretti per rispettare lo standard. ANSI SQL

  • Operazioni cast () — Le operazioni cast () da REAL o DOUBLE verso DECIMAL ora sono conformi allo standard. SQL Ad esempio, cast (double '100000000000000000000000000000000' as decimal(38)) prima restituiva 100000000000000005366162204393472, mentre ora restituisce 100000000000000000000000000000000.

  • JOIN... USINGJOIN ... USING ora è conforme alla SQL semantica standard. In precedenza, JOIN ... USING richiedeva di qualificare il nome della tabella in colonne e la colonna di entrambe le tabelle era presente nell'output. Le qualificazioni della tabella ora non sono valide e la colonna è presente una sola volta nell'output.

  • ROWtype literals rimossi — Il formato ROW ROW<int, int>(1, 2) type literal non è più supportato. Usa invece la sintassi ROW(1 int, 2 int).

  • Semantica di aggregazione raggruppata — Le aggregazioni raggruppate usano la semantica IS NOT DISTINCT FROM piuttosto che semantica dell'uguaglianza. Le aggregazioni raggruppate ora restituiscono risultati corretti e mostrano prestazioni migliorate durante il raggruppamento su valori con virgola mobile NaN. È supportato il raggruppamento su tipi di mappa, elenco e riga che contengono valori nulli.

  • I tipi con virgolette non sono più consentiti: in base ANSI SQL allo standard, i tipi di dati non possono più essere racchiusi tra virgolette. Ad esempio, SELECT "date" '2020-02-02' non è più una query valida. Utilizza invece la sintassi SELECT date '2020-02-02'.

  • Accesso ai campi riga anonimi — Non è più possibile accedere ai campi riga anonimi utilizzando la sintassi [.field0, .field1, ...].

  • Operazioni di raggruppamento complesse — Le complesse operazioni di raggruppamento GROUPING SETS, CUBE e ROLLUP non supportano il raggruppamento su espressioni composte da colonne di input. Solo ammessi solo i nomi di colonna.

Funzioni sostituite

Le funzioni seguenti non sono più supportate e sono state sostituite da sintassi che produce gli stessi risultati.

Limiti

I seguenti limiti sono stati introdotti nella versione 2 del motore Athena per garantire che le query non abbiano esito negativo a causa di limitazioni di risorse. Questi limiti non sono configurabili dagli utenti.

  • Numero degli elementi del risultato— Il numero di elementi del risultato n è limitato a 10.000 o meno per le seguenti funzioni: min(col, n), max(col, n), min_by(col1, col2, n) e max_by(col1, col2, n).

  • GROUPINGSETS— Il numero massimo di porzioni in un set di raggruppamento è 2048.

  • Lunghezza massima della riga del file di testo: la lunghezza massima della riga predefinita per i file di testo è 200 MB.

  • Dimensione massima del risultato della funzione di sequenza — La dimensione massima del risultato di una funzione di sequenza è 50.000 voci. Ad esempio, SELECT sequence(0,45000,1) ha esito positivo, ma SELECT sequence(0,55000,1) ha esito negativo con il messaggio di errore Il risultato della funzione di sequenza non deve avere più di 50.000 voci. Questo limite è valido per tutti i tipi di input per funzioni di sequenza, inclusi i le marche temporali.