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. Le informazioni complete sull'uso SELECT
e sulla SQL lingua esulano dallo scopo di questa documentazione. Per informazioni sull'utilizzo specifico SQL di Athena, vedere Considerazioni e limitazioni per le SQL query in Amazon Athena e. Esegui SQL query in Amazon Athena Per vedere un 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 SQL SELECT dichiarazioni devono essere racchiuse tra virgolette doppie. Per ulteriori informazioni, consulta Parole chiave riservate a cui sfuggire nelle istruzioni SQL SELECT.
Parametri
- [WITHwith_query [,...]]
-
È possibile utilizzare
WITH
per appiattire query nidificate o per semplificare le sottoquery.L'utilizzo della clausola
WITH
per creare query ricorsive è supportato a partire dalla versione 3 del motore Athena. La profondità massima di ricorsione è pari a 10.La clausola
WITH
precede l'elencoSELECT
in 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 ognisubquery
deve 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.
-
- [ALL|] seleziona_espressione DISTINCT
-
select_expression
determina la righe da selezionare. Aselect_expression
può 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_alias
sintassi 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.ROW
I campi della riga definiscono le colonne di output da includere nel risultato. -
Perché
relation.*
, le colonne direlation
sono 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 diALL
viene gestito come se fosse omesso; vengono selezionate tutte le righe per tutte le colonne e duplicati vengono conservati. -
Usa
DISTINCT
per restituire solo i valori distinti quando una colonna contiene valori duplicati.
-
- FROMfrom_item [,...]
-
Indica l'input alla query, dove
from_item
può essere una vista, un costrutto JOIN o una sottoquery, come descritto di seguito.from_item
può 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'istruzioneSELECT
ecolumn_alias
definisce le colonne per l'alias
specificato.
-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_condition
consente di specificare nomi di colonna per le chiavi JOIN in più tabelle e l'utilizzo dijoin_column
richiede chejoin_column
esista in entrambe le tabelle.
-
-
- [condizione] WHERE
-
Filtra i risultati in base alla
condition
specificata, dovecondition
in genere ha la seguente sintassi.column_name
operator
value
[[[AND | OR]column_name
operator
value
] ...]Il
operator
può 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_A
ANDinteger_B
varchar
, 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')
-
- [GROUPDI [ALL|DISTINCT] grouping_expressions [,...]]
-
Suddivide l'output dell'istruzione
SELECT
in righe con valori corrispondenti.ALL
eDISTINCT
determinano se i set duplicati di set di raggruppamento producono ciascuno righe di output diverse. Se omesso, viene utilizzatoALL
.grouping_expressions
consente 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_expressions
può essere qualsiasi funzione, comeSUM
,AVG
oCOUNT
, eseguita sulle colonne di input.Le espressioni
GROUP BY
possono 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
,CUBE
eROLLUP
.GROUP BY GROUPING SETS
specifica più elenchi di colonne su cui eseguire il raggruppamento.GROUP BY CUBE
genera tutti i possibili set di raggruppamento per un determinato set di colonne.GROUP BY ROLLUP
genera 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 ALL
per ottenere gli stessi risultati ottenuti in queste operazioniGROUP BY
, ma le query che utilizzanoGROUP BY
hanno il vantaggio di leggere i dati una sola volta, mentreUNION ALL
legge 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_interrogazione]]
-
UNION
,INTERSECT
eEXCEPT
combinano i risultati di più di un'istruzioneSELECT
in una singola query.ALL
oDISTINCT
controlla l'unicità delle righe incluse nel set finale di risultati.UNION
combina le righe risultanti dalla prima query con le righe risultanti dalla seconda query. Per eliminare i duplicati,UNION
crea una tabella hash, che consuma memoria. Per prestazioni migliori, prendere in considerazione l'utilizzo diUNION ALL
se la query non richiede l'eliminazione dei duplicati. Più clausoleUNION
vengono elaborate da sinistra a destra, a meno che non si utilizzino le parentesi per definire esplicitamente l'ordine di elaborazione.INTERSECT
restituisce solo le righe presenti nei risultati sia della prima che della seconda query.EXCEPT
restituisce le righe dai risultati della prima query, escludendo le righe trovate dalla seconda query.ALL
fa sì che tutte le righe siano incluse, anche se le righe sono identiche.DISTINCT
fa sì che solo righe univoche siano incluse nel set di risultati combinati. - [ORDERPER espressione [ASC|DESC] [|] [NULLSFIRST,... NULLSLAST]]
-
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 secondaexpression
viene applicata a righe con valori corrispondenti dalla prima espressione e così via.Ogni
expression
può specificare colonne di output daSELECT
o un numero ordinale per una colonna di output per posizione, a partire da uno.ORDER BY
viene valutato come ultimo passaggio dopo qualsiasi clausolaGROUP BY
oHAVING
.ASC
eDESC
determinano se i risultati sono in ordine crescente o decrescente. L'ordinamento predefinito è crescente ()ASC
. L'ordine predefinito nullo èNULLS LAST
, indipendentemente dall'ordinamento crescente o decrescente. - [OFFSETconteggio [ROW|ROWS]]
-
Utilizzare la clausola
OFFSET
per eliminare un certo numero di righe iniziali dal set di risultati. Se la clausolaORDER BY
è presente, la clausolaOFFSET
viene 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[contare |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.
BERNOULLI
seleziona 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 lapercentage
del 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
percentage
campione e un valore casuale calcolato in fase di runtime. Il campionamentoSYSTEM
dipende dal connettore. Questo metodo non garantisce la campionatura indipendente delle probabilità. - [UNNEST(array_o_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
UNNEST
con 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 ORDINALITY
aggiunge un colonna di ordinalità alla fine.UNNEST
viene in genere utilizzato con unJOIN
e 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 SQL query in Amazon Athena |
Utilizzo di SELECT per creare una tabella |
Crea una tabella dai risultati della query (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 |