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à.
SELECT
Recupera righe di dati da zero o più tabelle.
Nota
In questo argomento vengono fornite informazioni di riepilogo per riferimento. Informazioni complete sull'utilizzo di SELECT e il linguaggio SQL non rientrano nell'ambito di questa documentazione. Per informazioni sull'utilizzo di SQL specifico per Athena, consulta Considerazioni e restrizioni per le query SQL in Amazon Athena e Esegui query SQL in Amazon Athena. Per vedere esempio di creazione di un database o di una tabella e di esecuzione di una query SELECT sulla tabella di Athena, consulta Inizia a usare.
Riepilogo
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
Nota
Le parole riservate nelle istruzioni SQL SELECT devono essere racchiuse tra virgolette doppie. Per ulteriori informazioni, consulta Parole chiave riservate da cui scappare nelle istruzioni SQL SELECT.
Parametri
- [ WITH with_query [, ....] ]
-
È possibile utilizzare
WITHper appiattire query nidificate o per semplificare le sottoquery.L'utilizzo della clausola
WITHper creare query ricorsive è supportato a partire dalla versione 3 del motore Athena. La profondità massima di ricorsione è pari a 10.La clausola
WITHprecede l'elencoSELECTin una query e definisce una o più sottoquery da usare all'interno della querySELECT.Ogni sottoquery definisce una tabella temporanea, simile a una definizione vista, cui è possibile fare riferimento nella clausola
FROM. Le tabelle vengono utilizzate solo quando la query è in esecuzione.La sintassi
with_queryè:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)Dove:
-
subquery_table_nameè un univoco per una tabella temporanea che definisce i risultati della sottoquery della clausolaWITH. A ognisubquerydeve essere assegnato un nome di tabella a cui è possibile fare riferimento nella clausolaFROM. -
column_name [, ...]è un elenco opzionale dei nomi di colonna di output. Il numero dei nomi di colonna specificati deve essere uguale o inferiore al numero delle colonne definite dallasubquery. -
subqueryè un'istruzione di query.
-
- [TUTTI | DISTINCT] select_expression
-
select_expressiondetermina la righe da selezionare. Aselect_expressionpuò utilizzare uno dei seguenti formati:expression [ [ AS ] column_alias ] [, ...]row_expression.* [ AS ( column_alias [, ...] ) ]relation.**-
La
expression [ [ AS ] column_alias ]sintassi specifica una colonna di output. La[AS] column_aliassintassi opzionale specifica un nome di titolo personalizzato da utilizzare per la colonna nell'output. -
For
row_expression.* [ AS ( column_alias [, ...] ) ],row_expressionè un'espressione arbitraria del tipo di dati.ROWI campi della riga definiscono le colonne di output da includere nel risultato. -
Perché
relation.*, le colonne direlationsono incluse nel risultato. Questa sintassi non consente l'uso di alias di colonna. -
L'asterisco
*specifica che tutte le colonne devono essere incluse nel set di risultati. -
Nel set di risultati, l'ordine delle colonne è lo stesso dell'ordine in cui vengono specificate dall'espressione select. Se un'espressione select restituisce più colonne, l'ordine delle colonne segue l'ordine utilizzato nella relazione di origine o nell'espressione del tipo di riga.
-
Quando vengono specificati alias di colonna, gli alias sostituiscono i nomi di campi di colonna o riga preesistenti. Se l'espressione select non ha nomi di colonna, nell'output vengono visualizzati i nomi di colonna anonimi con indicizzazione zero (
_col0,,_col1)._col2, ... -
Il valore predefinito è
ALL. L'utilizzo diALLviene gestito come se fosse omesso; vengono selezionate tutte le righe per tutte le colonne e duplicati vengono conservati. -
Usa
DISTINCTper restituire solo i valori distinti quando una colonna contiene valori duplicati.
-
- FROM from_item [, ...]
-
Indica l'input alla query, dove
from_itempuò essere una vista, un costrutto JOIN o una sottoquery, come descritto di seguito.from_itempuò essere:-
table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]Dove
table_nameè il nome della tabella di destinazione da cui selezionare le righe;aliasè il nome da assegnare all'output dell'istruzioneSELECTecolumn_aliasdefinisce le colonne per l'aliasspecificato.
-O-
-
join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]Dove
join_typeè una tra le seguenti opzioni:-
[ INNER ] JOIN -
LEFT [ OUTER ] JOIN -
RIGHT [ OUTER ] JOIN -
FULL [ OUTER ] JOIN -
CROSS JOIN -
ON join_condition | USING (join_column [, ...])Dove l'utilizzo dijoin_conditionconsente di specificare nomi di colonna per le chiavi JOIN in più tabelle e l'utilizzo dijoin_columnrichiede chejoin_columnesista in entrambe le tabelle.
-
-
- [ condizione WHERE ]
-
Filtra i risultati in base alla
conditionspecificata, doveconditionin genere ha la seguente sintassi.column_nameoperatorvalue[[[AND | OR]column_nameoperatorvalue] ...]operatorPuò essere uno dei comparatori=,,,,>,<.>=<=<>!=Le seguenti espressioni di sottoquery possono essere utilizzate anche nella clausola
WHERE.-
[NOT] BETWEEN— Specifica un intervallo tra due numeri interi, come nell'esempio seguente. Se il tipo di dati della colonna èinteger_AANDinteger_Bvarchar, la colonna deve essere prima creata su un numero intero.SELECT DISTINCT processid FROM "webdata"."impressions" WHERE cast(processid as int) BETWEEN 1500 and 1800 ORDER BY processid -
[NOT] LIKE— Cerca il modello specificato. Utilizza il segno di percentuale (value%) come carattere jolly, come nell'esempio seguente.SELECT * FROM "webdata"."impressions" WHERE referrer LIKE '%.org' -
[NOT] IN (– Specifica un elenco di possibili valori per una colonna, come nell'esempio seguente.value[,value[, ...])SELECT * FROM "webdata"."impressions" WHERE referrer IN ('example.com','example.net','example.org')
-
- [GROUP BY [ALL | DISTINCT] grouping_expressions [,...]]
-
Suddivide l'output dell'istruzione
SELECTin righe con valori corrispondenti.ALLeDISTINCTdeterminano se i set duplicati di set di raggruppamento producono ciascuno righe di output diverse. Se omesso, viene utilizzatoALL.grouping_expressionsconsente di eseguire operazioni di raggruppamento complesse. È possibile utilizzare operazioni di raggruppamento complesse per eseguire un'analisi che richiede di aggregare più serie di colonne in una query singola.L'elemento
grouping_expressionspuò essere qualsiasi funzione, comeSUM,AVGoCOUNT, eseguita sulle colonne di input.Le espressioni
GROUP BYpossono raggruppare l'output in base ai nomi di colonna di input che non appaiono nell'output dell'istruzioneSELECT.Tutte le espressioni di output devono essere funzioni aggregate o colonne presenti nella clausola
GROUP BY.È possibile utilizzare una singola query per eseguire un'analisi che richiede di aggregare più serie di colonne.
Athena supporta aggregazioni complesse usando
GROUPING SETS,CUBEeROLLUP.GROUP BY GROUPING SETSspecifica più elenchi di colonne su cui eseguire il raggruppamento.GROUP BY CUBEgenera tutti i possibili set di raggruppamento per un determinato set di colonne.GROUP BY ROLLUPgenera tutti i possibili subtotali per un determinato set di colonne. Le operazioni di raggruppamento complesse non supportano il raggruppamento su espressioni composte da colonne di input. Solo ammessi solo i nomi di colonna.Spesso è possibile utilizzare
UNION ALLper ottenere gli stessi risultati ottenuti in queste operazioniGROUP BY, ma le query che utilizzanoGROUP BYhanno il vantaggio di leggere i dati una sola volta, mentreUNION ALLlegge i dati sottostanti tre volte e potrebbe produrre risultati incoerenti quando l'origine dati è soggetta a modifiche. - [ condizione HAVING ]
-
Utilizzata con funzioni aggregate e con la clausola
GROUP BY. Controlla quali gruppi sono selezionati, eliminando i gruppi che non soddisfano lacondition. Questo filtraggio si verifica dopo che i gruppi e gli aggregati sono stati calcolati. - [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] union_query] ]
-
UNION,INTERSECTeEXCEPTcombinano i risultati di più di un'istruzioneSELECTin una singola query.ALLoDISTINCTcontrolla l'unicità delle righe incluse nel set finale di risultati.UNIONcombina le righe risultanti dalla prima query con le righe risultanti dalla seconda query. Per eliminare i duplicati,UNIONcrea una tabella hash, che consuma memoria. Per prestazioni migliori, prendere in considerazione l'utilizzo diUNION ALLse la query non richiede l'eliminazione dei duplicati. Più clausoleUNIONvengono elaborate da sinistra a destra, a meno che non si utilizzino le parentesi per definire esplicitamente l'ordine di elaborazione.INTERSECTrestituisce solo le righe presenti nei risultati sia della prima che della seconda query.EXCEPTrestituisce le righe dai risultati della prima query, escludendo le righe trovate dalla seconda query.ALLfa sì che tutte le righe siano incluse, anche se le righe sono identiche.DISTINCTfa sì che solo righe univoche siano incluse nel set di risultati combinati. - [ espressione ORDER BY [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
-
Ordina un set di risultati da uno o più output
expression.Quando la clausola contiene più espressioni, il set di risultati è ordinato in base alla prima
expression. Quindi la secondaexpressionviene applicata a righe con valori corrispondenti dalla prima espressione e così via.Ogni
expressionpuò specificare colonne di output daSELECTo un numero ordinale per una colonna di output per posizione, a partire da uno.ORDER BYviene valutato come ultimo passaggio dopo qualsiasi clausolaGROUP BYoHAVING.ASCeDESCdeterminano se i risultati sono in ordine crescente o decrescente. L'ordinamento predefinito è crescente ().ASCL'ordine predefinito nullo èNULLS LAST, indipendentemente dall'ordinamento crescente o decrescente. - [ OFFSET count [ ROW | ROWS ] ]
-
Utilizzare la clausola
OFFSETper eliminare un certo numero di righe iniziali dal set di risultati. Se la clausolaORDER BYè presente, la clausolaOFFSETviene valutata su un set di risultati ordinato e il set rimane ordinato dopo che le righe ignorate sono state scartate. Se la query non ha la clausolaORDER BY, è arbitrario quali righe vengono scartate. Se il conteggio specificato daOFFSETè uguale o maggiore delle dimensioni del set di risultati, il risultato finale è vuoto. - LIMIT [count | ALL]
-
Limita il numero di righe del set di risultati a
count.LIMIT ALLè lo stesso omettendo la clausolaLIMIT. Se la query non dispone di alcuna clausolaORDER BY, i risultati sono arbitrari. - TABLESAMPLE [ BERNOULLI | SYSTEM ] (percentuale)
-
Operatore facoltativo per selezionare righe da una tabella in base a un metodo di campionamento.
BERNOULLIseleziona ogni riga che deve essere nella tabella di esempio con una probabilità dipercentage. Tutti i blocchi fisici della tabella vengono scansionati e determinate righe vengono ignorate in base a un confronto tra lapercentagedel campione e un valore casuale calcolato in fase di runtime.Con
SYSTEM, la tabella viene suddivisa in segmenti logici di dati e viene campionata a questa granularità.Vengono selezionate tutte le righe da un determinato segmento oppure il segmento viene ignorato in base a un confronto tra la
percentagecampione e un valore casuale calcolato in fase di runtime. Il campionamentoSYSTEMdipende dal connettore. Questo metodo non garantisce la campionatura indipendente delle probabilità. - [ UNNEST (array_or_map) [WITH ORDINALITY] ]
-
Espande una matrice o una mappa in una relazione. Le matrice vengono espanse in una singola colonna. Le mappe vengono espanse in due colonne (chiave, valore).
È possibile utilizzare
UNNESTcon più argomenti, che vengono espansi in più colonne con un numero di righe pari all'argomento di cardinalità più alto.Alle altre colonne vengono aggiunti degli zeri.
La clausola
WITH ORDINALITYaggiunge un colonna di ordinalità alla fine.UNNESTviene in genere utilizzato con unJOINe può fare riferimento a colonne dalle relazioni a sinistra delJOIN.
Ottenere le posizioni dei file per i dati di origine in Amazon S3
Per visualizzare la posizione del file Amazon S3 per i dati in una riga di tabella, puoi utilizzare "$path" in una query SELECT, come nell'esempio seguente:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
Questa query restituisce un risultato come il seguente:
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
Per restituire un elenco ordinato e univoco dei percorsi del nome file S3 per i dati in una tabella, è possibile utilizzare SELECT DISTINCT e ORDER BY, come nell'esempio seguente.
SELECT DISTINCT "$path" AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Per restituire solo i nomi dei file senza il percorso, è possibile trasmettere "$path" come parametro per una funzione regexp_extract, come nell'esempio seguente.
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Per restituire i dati da un file specifico, specificare il file nella clausola WHERE, come nell'esempio seguente.
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
Per ulteriori informazioni ed esempi, consulta l'articolo del Portale del sapere In che modo è possibile visualizzare il file sorgente Amazon S3 per cercare una riga di una tabella Athena?
Nota
In Athena, le colonne di metadati nascoste Hive o Iceberg e $bucket, $file_modified_time, $file_size e $partition non sono supportate per le viste.
Escape delle virgolette singole
Per eseguire una procedura di escape di virgolette singole, precederla con altre virgolette, come nell'esempio seguente. Non confondere questo con doppie virgolette.
Select 'O''Reilly'
Risultati
O'Reilly
Risorse aggiuntive
Per ulteriori informazioni sull'utilizzo delle istruzioni SELECT in Athena, consulta le seguenti risorse.
| Per informazioni su questo | Consulta questo |
|---|---|
| Esecuzione di query in Athena | Esegui query SQL in Amazon Athena |
Utilizzo di SELECT per creare una tabella |
Creare una tabella dai risultati delle interrogazioni (CTAS) |
Inserimento di dati da una query SELECT in un'altra tabella |
INSERT INTO |
Utilizzo di funzioni integrate nelle istruzioni SELECT |
Funzioni in Amazon Athena |
Utilizzo di funzioni definite dall'utente nelle istruzioni SELECT |
Interrogazione con funzioni definite dall'utente |
| Esecuzione di query sui metadati del catalogo dati | Interroga il AWS Glue Data Catalog |