SELECT
Ruft Datenzeilen aus null oder mehr Tabellen ab.
Anmerkung
Dieses Thema enthält zusammenfassende Informationen zur Referenz. Umfassende Informationen über die Verwendung von SELECT und der SQL-Sprache gehen über den Rahmen dieser Dokumentation hinaus. Weitere Informationen zur Verwendung von SQL speziell für Athena finden Sie unter Überlegungen und Einschränkungen für SQL-Abfragen in Amazon Athena und Ausführen von SQL-Abfragen in Amazon Athena. Für ein Beispiel für das Erstellen einer Datenbank, das Erstellen einer Tabelle und das Ausführen einer SELECT-Abfrage auf dem Tisch in Athena siehe Erste Schritte.
Syntax
[ 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 ] ]
Anmerkung
Reservierte Wörter in SQL SELECT-Anweisungen müssen in doppelte Anführungszeichen eingeschlossen werden. Weitere Informationen finden Sie unter Reservierte Schlüsselwörter, die in SQL-SELECT-Anweisungen umgegangen werden müssen.
Parameter
- [ WITH with_query [, ....] ]
-
Mit
WITHkönnen Sie verschachtelte Abfragen reduzieren oder Unterabfragen vereinfachen.Die Verwendung der
WITH-Klausel zur Erstellung rekursiver Abfragen wird ab der Athena-Engine-Version 3 unterstützt. Die maximale Rekursionstiefe beträgt 10.Die Klausel
WITHgeht derSELECT-Liste in einer Abfrage voraus und legt eine oder mehrere Unterabfragen für die Verwendung in derSELECT-Abfrage fest.Jede Unterabfrage definiert eine temporäre Tabelle ähnlich wie eine Ansichtdefinition, die mit der
FROM-Klausel referenziert werden kann. Die Tabellen werden nur verwendet, wenn die Abfrage ausgeführt wird.with_queryDie Syntax von lautet:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)Wobei Folgendes gilt:
-
subquery_table_nameist ein eindeutiger Name für eine temporäre Tabelle, die die Ergebnisse der Unterabfrage mitWITH-Klausel definiert. Jedesubquerymuss einen Tabellennamen erhalten, der in derFROM-Klausel referenziert werden kann. -
column_name [, ...]ist eine optionale Liste der ausgegebenen Spaltennamen. Die Anzahl der Spaltennamen muss größer als oder gleich der Anzahl der Spalten sein, die von der definiert wirdsubquery. -
subqueryist eine Abfrageanweisung.
-
- [ ALL | DISTINCT ] select_expression
-
select_expressionlegt die auszuwählenden Zeilen fest. Einselect_expressionkann eines der folgenden Formate verwenden:expression [ [ AS ] column_alias ] [, ...]row_expression.* [ AS ( column_alias [, ...] ) ]relation.**-
Die
expression [ [ AS ] column_alias ]Syntax gibt eine Ausgabespalte an. Die optionale[AS] column_alias-Syntax gibt einen benutzerdefinierten Überschriftennamen an, der für die Spalte in der Ausgabe verwendet werden soll. -
Für
row_expression.* [ AS ( column_alias [, ...] ) ],row_expressionist ein beliebiger Ausdruck eines DatentypsROW. Die Felder der Zeile definieren die Ausgabespalten, die im Ergebnis enthalten sein sollen. -
Für
relation.*, die Spalten vonrelationsind im Ergebnis enthalten. Diese Syntax erlaubt nicht die Verwendung von Spaltenaliasnamen. -
Das Sternchen
*gibt an, dass alle Spalten in die Ergebnismenge aufgenommen werden. -
In der Ergebnismenge entspricht die Reihenfolge der Spalten der Reihenfolge ihrer Angabe durch den Auswahlausdruck. Gibt ein Auswahlausdruck mehrere Spalten gibt, folgt die Spaltenreihenfolge der Reihenfolge, die in der Quellrelation oder im Zeilentypausdruck verwendet wurde.
-
Sind Spaltenaliase angegeben, überschreiben die Aliase bereits vorhandene Spalten- oder Zeilenfeldnamen. Enthält der Auswahlausdruck keine Spaltennamen, werden anonyme Spaltennamen (
_col0,_col1,_col2, ...) mit einem Nullindex in der Ausgabe angezeigt. -
ALList die Standardeinstellung. Bei Verwendung vonALLwird dies so behandelt, als wäre kein Wert angegeben worden. Alle Zeilen aller Spalten werden einschließlich Duplikaten ausgewählt. -
Verwenden Sie
DISTINCT, um nur eindeutige Werte zurückzugeben, wenn eine Spalte Duplikatwerte enthält.
-
- FROM from_item [,...]
-
Gibt die Eingabe der Abfrage an, wobei
from_itemeine Ansicht, ein JOIN-Konstrukt oder eine Unterabfrage wie unten beschrieben sein kann.from_itemkann eines der Folgenden sein:-
table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]Hier ist
table_nameder Name der Zieltabelle, aus der Zeilen ausgewählt werden.aliasist der Name für die Ausgabe derSELECT-Anweisung undcolumn_aliasdefiniert die Spalten für den angegebenenalias.
-ODER-
-
join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]Hierbei ist
join_typeeines der Folgenden:-
[ INNER ] JOIN -
LEFT [ OUTER ] JOIN -
RIGHT [ OUTER ] JOIN -
FULL [ OUTER ] JOIN -
CROSS JOIN -
ON join_condition | USING (join_column [, ...])Wobei Sie durch Verwenden vonjoin_conditiondie Spaltennamen für JOIN-Schlüssel in mehreren Tabellen angeben können. Für die Verwendung vonjoin_columnmussjoin_columnin beiden Tabellen vorhanden sein.
-
-
- [ WHERE condition ]
-
Filtert Ergebnisse nach dem von Ihnen angegebenen
condition, wobeiconditionim Allgemeinen die folgende Syntax hat.column_nameoperatorvalue[[[AND | OR]column_nameoperatorvalue] ...]Der
Operatorkann einer der Komparatoren=,>,<,>=,<=,<>,!=sein.Die folgenden Unterabfrageausdrücke können auch in der
WHERE-Klausel verwendet werden.-
[NOT] BETWEEN– Gibt einen Bereich zwischen zwei Ganzzahlen an, wie im folgenden Beispiel. Wenn der Spaltendatentypinteger_AANDinteger_Bvarcharist, muss die Spalte zuerst in eine Ganzzahl umgewandelt werden.SELECT DISTINCT processid FROM "webdata"."impressions" WHERE cast(processid as int) BETWEEN 1500 and 1800 ORDER BY processid -
[NOT] LIKE– Sucht nach dem angegebenen Muster. Verwenden Sie das Prozentzeichen (value%) als Platzhalterzeichen, wie im folgenden Beispiel.SELECT * FROM "webdata"."impressions" WHERE referrer LIKE '%.org' -
[NOT] IN (– Gibt eine Liste möglicher Werte für eine Spalte an, wie im folgenden Beispiel gezeigt.value[,value[, ...])SELECT * FROM "webdata"."impressions" WHERE referrer IN ('example.com','example.net','example.org')
-
- [ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]
-
Teilt die Ausgabe der
SELECT-Anweisung in Zeilen mit passenden Werten.Über
ALLundDISTINCTwird festgelegt, ob für Duplikate jeweils eine eigene Ausgabezeile angelegt wird. Wenn nichts angegeben ist, wird vonALLausgegangen.grouping_expressionsermöglicht Ihnen, komplexe Gruppierungsoperationen auszuführen. Sie können komplexe Gruppierungsvorgänge verwenden, um Analysen durchzuführen, die eine Aggregation mehrerer Spaltengruppen in einer einzigen Abfrage erfordern.Das
grouping_expressions-Element kann eine beliebige Funktion sein, z. B.SUM,AVGoderCOUNT, die auf Eingabespalten ausgeführt wird.Mithilfe von
GROUP BY-Ausdrücken kann die Ausgabe nach Eingabespaltennamen gruppiert werden, die nicht in der Ausgabe derSELECT-Anweisung auftauchen.Alle Ausgabeausdrücke müssen entweder Aggregatfunktionen oder Spalten sein, die in der
GROUP BY-Klausel vorhanden sind.Sie können mit einer einzelnen Abfrage eine Analyse durchführen, für die mehrere Spaltensätze zusammengefasst werden müssen.
Athena unterstützt komplexe Aggregationen mit
GROUPING SETS,CUBEundROLLUP.GROUP BY GROUPING SETSgibt mehrere Spaltenlisten an, nach denen gruppiert werden soll.GROUP BY CUBEgeneriert alle möglichen Gruppierungssätze für einen gegebenen Satz von Spalten.GROUP BY ROLLUPgeneriert alle möglichen Zwischensummen für einen gegebenen Satz von Spalten. Komplexe Gruppierungsoperationen unterstützen keine Gruppierung von Ausdrücken, die aus Eingabespalten bestehen. Es sind nur Spaltennamen zulässig.Oft können Sie mit
UNION ALLdieselben Ergebnisse erzielen wie mit diesenGROUP BY-Operationen. Abfragen, in denenGROUP BYverwendet wird, haben jedoch den Vorteil, dass die Daten einmalig ausgelesen werden, wohingegen beiUNION ALLdie zugrunde liegenden Daten dreimal ausgelesen werden, was zu uneinheitlichen Ergebnissen führen kann, wenn die Datenquelle sich geändert hat. - [ HAVING condition ]
-
Wird in Aggregatfunktionen und der
GROUP BY-Klausel verwendet. Kontrolliert, welche Gruppen ausgewählt werden und schließt Gruppen aus, die die nicht erfüllencondition. Diese Filterung wird nach der Berechnung der Gruppierungs- und Aggregatfunktionen ausgeführt. - [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] union_query] ]
-
UNION,INTERSECTundEXCEPTkombinieren die Ergebnisse mehrererSELECT-Anweisungen in eine einzelne Abfrage.ALLoderDISTINCTsteuern die Eindeutigkeit der Zeilen, die in der endgültigen Ergebnismenge enthalten sind.UNIONkombiniert die Zeilen, die sich aus der ersten Abfrage ergeben, mit den Zeilen, die aus der zweiten Abfrage resultieren. Um Duplikate zu eliminieren, erstelltUNIONeine Hash-Tabelle, die Speicher verbraucht. Ziehen Sie für eine bessere Leistung die Verwendung vonUNION ALLin Betracht, wenn Ihre Abfrage die Eliminierung von Duplikaten nicht erfordert. MehrereUNION-Klauseln werden von links nach rechts verarbeitet, sofern Sie keine Klammern verwenden, um die Verarbeitungsreihenfolge explizit festzulegen.INTERSECTgibt nur die Zeilen zurück, die in den Ergebnissen der ersten und der zweiten Abfrage vorhanden sind.EXCEPTgibt die Zeilen aus den Ergebnissen der ersten Abfrage zurück, ausgenommen die Zeilen, die von der zweiten Abfrage gefunden wurden.ALLbewirkt, dass alle Zeilen aufgenommen werden, auch wenn die Zeilen identisch sind.DISTINCTbewirkt, dass nur eindeutige Zeilen in die kombinierte Ergebnismenge aufgenommen werden. - [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
-
Sortiert eine Ergebnisgruppe nach einem oder mehreren Ausgabe-
expression.Wenn die Klausel mehrere Ausdrücke enthält, wird die Ergebnisgruppe nach dem ersten sortiert
expression. Danach wird der zweiteexpressionauf die Zeilen mit passenden Werten aus dem ersten Ausdruck angewendet usw.Jeder
expressionkann Ausgabespalten ausSELECToder eine Ordinalzahl für eine Ausgabespalte nach Position (beginnend mit 1) festlegen.ORDER BYwird im letzten Schritt nachGROUP BY- undHAVING-Klauseln ausgewertet. ÜberASCundDESCwird festgelegt, ob die Ergebnisse in auf- oder absteigender Reihenfolge sortiert werden. Standardmäßig ist die Sortierreihenfolge aufsteigend (ASC). Die Standardnullsortierung istNULLS LASTunabhängig von auf- oder absteigender Sortierreihenfolge. - [ OFFSET count [ ROW | ROWS ] ]
-
Verwenden Sie die
OFFSET-Klausel, um eine Reihe führender Zeilen aus der Ergebnismenge zu verwerfen. Wenn dieORDER BY-Klausel vorhanden ist, wird dieOFFSET-Klausel über eine sortierte Ergebnismenge ausgewertet und die Menge bleibt sortiert, nachdem die übersprungenen Zeilen verworfen wurden. Wenn die Abfrage keineORDER BY-Klausel hat, ist es willkürlich, welche Zeilen verworfen werden. Wenn die durchOFFSETangegebene Anzahl der Größe der Ergebnismenge entspricht oder diese überschreitet, ist das Endergebnis leer. - LIMIT [ count | ALL ]
-
Beschränkt die Anzahl der Zeilen in der Ergebnisgruppe auf
count.LIMIT ALLentspricht dem Weglassen derLIMIT-Klausel. Wenn die Abfrage keineORDER BY-Klausel enthält, werden die Ergebnisse zufällig angezeigt. - TABLESAMPLE [ BERNOULLI | SYSTEM ] (percentage)
-
Optionaler Operator zur Auswahl von Zeilen aus einer Tabelle basierend auf einer Stichprobenmethode.
BERNOULLIMit wird jede Zeile mit einer Wahrscheinlichkeit von als Teil der Stichprobe ausgewähltpercentage. Alle physischen Blöcke der Tabelle werden gescannt und bestimmte Zeilen werden basierend auf einem Vergleich zwischen dempercentageder Stichproben und einem zufälligen, zur Laufzeit berechneten Wert übersprungen.Mit
SYSTEMwird die Tabelle in logische Datensegmente unterteilt. Aus der Tabelle werden Stichproben mit dieser Granularität entnommen.Es werden entweder alle Zeilen aus einem bestimmten Segment ausgewählt oder das Segment wird basierend auf einem Vergleich zwischen dem
percentageder Stichprobe und einem zufälligen, während der Laufzeit berechneten Wert übersprungen.SYSTEM-Stichproben sind abhängig vom Connector. Mit dieser Methode kann keine unabhängige Stichprobenwahrscheinlichkeit garantiert werden. - [ UNNEST (array_or_map) [WITH ORDINALITY] ]
-
Erweitert ein Array oder eine Zuordnung in eine Beziehung. Arrays werden in eine einzelne Spalte erweitert. Zuordnungen werden in zwei Spalten (Schlüssel und Wert) erweitert.
Sie können
UNNESTmit mehreren Argumenten verwenden, die in mehrere Spalten mit so vielen Zeilen wie das höchste Kardinalitätsargument erweitert werden.Andere Spalten werden mit Nullen aufgefüllt.
Die
WITH ORDINALITY-Klausel fügt eine Ordinalitätsspalte am Ende hinzu.UNNESTwird normalerweise mit einemJOINverwendet und kann auf Spalten von Beziehungen links desJOINverweisen.
Abrufen der Dateispeicherorte für Quelldaten in Amazon S3
Um den Speicherort der Amazon-S3-Datei für die Daten in einer Tabellenzeile anzuzeigen, können Sie "$path" in einer SELECT-Abfrage verwenden, wie im folgenden Beispiel:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
Dies gibt ein Ergebnis wie das folgende zurück:
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
Um eine sortierte, eindeutige Liste der S3-Dateinamenspfade für die Daten in einer Tabelle zurückzugeben, können Sie wie im folgenden Beispiel SELECT DISTINCT und ORDER BY verwenden.
SELECT DISTINCT "$path" AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Um nur die Dateinamen ohne Pfad zurückzugeben, können Sie "$path" wie im folgenden Beispiel als Parameter an eine regexp_extract-Funktion übergeben.
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Um die Daten aus einer bestimmten Datei zurückzugeben, geben Sie die Datei in der WHERE-Klausel an, wie im folgenden Beispiel.
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
Weitere Informationen und Beispiele finden Sie im Wissenscenter-Artikel Wie kann ich die Amazon-S3-Quelldatei für eine Zeile in einer Athena-Tabelle anzeigen?
Anmerkung
In Athena, Hive oder Iceberg werden die versteckten Metadatenspalten $bucket, $file_modified_time, $file_size und $partition für Ansichten nicht unterstützt.
Maskieren von einfachen Anführungszeichen mit Escape
Um ein einzelnes Anführungszeichen mit Escape zu maskieren, stellen Sie ihm ein weiteres einfaches Anführungszeichen voran, wie im folgenden Beispiel. Verwechseln Sie dies nicht mit einem doppelten Anführungszeichen.
Select 'O''Reilly'
Ergebnisse
O'Reilly
Weitere Ressourcen
Weitere Informationen zur Verwendung von SELECT-Anweisungen in Athena finden Sie in den folgenden Ressourcen.
| Weitere Informationen darüber | Sehen Sie dies an |
|---|---|
| Ausführen von Abfragen in Athena | Ausführen von SQL-Abfragen in Amazon Athena |
Mit SELECT eine Tabelle erstellen |
Erstellen einer Tabelle aus Abfrageergebnissen (CTAS) |
Einfügen von Daten aus einer SELECT-Abfrage in eine andere Tabelle |
INSERT INTO |
Integrierte Funktionen in SELECT-Anweisungen verwenden |
Funktionen in Amazon Athena |
Verwenden von benutzerdefinierten Funktionen in SELECT-Anweisungen |
Abfragen mit benutzerdefinierten Funktionen |
| Metadaten des Datenkatalogs abfragen | AWS Glue Data Catalog abfragen |