Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
SELECT
Ruft Datenzeilen aus null oder mehr Tabellen ab.
Anmerkung
Dieses Thema enthält zusammenfassende Informationen zur Referenz. Umfassende Informationen zur Verwendung SELECT und zur SQL Sprache würden den Rahmen dieser Dokumentation sprengen. Informationen zur VerwendungSQL, die spezifisch für Athena sind, finden Sie unter Überlegungen und Einschränkungen für SQL-Abfragen in Amazon Athena undFühren Sie SQL-Abfragen in Amazon Athena aus. 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 Aussagen müssen in doppelte Anführungszeichen gesetzt werden. Weitere Informationen finden Sie unter Reservierte Schlüsselwörter zur Escape-Funktion in Anweisungen SQL SELECT.
Parameter
- [WITHwith_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.Die Syntax von
with_querylautet:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)Wobei 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 dersubquerydefiniert wird. -
subqueryist eine Abfrageanweisung.
-
- [ALL|] Ausdruck_auswählen DISTINCT
-
select_expressionlegt die auszuwählenden Zeilen fest. Aselect_expressionkann eines der folgenden Formate verwenden:expression [ [ AS ] column_alias ] [, ...]row_expression.* [ AS ( column_alias [, ...] ) ]relation.**-
Die
expression [ [ AS ] column_alias ]Syntax spezifiziert eine Ausgabespalte. Die optionale[AS] column_aliasSyntax gibt einen benutzerdefinierten Überschriftennamen an, der für die Spalte in der Ausgabe verwendet werden soll. -
For
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. -
Denn
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, in der sie durch den Auswahlausdruck spezifiziert wurden. Wenn ein Auswahlausdruck mehrere Spalten zurückgibt, folgt die Spaltenreihenfolge der Reihenfolge, die in der Quellrelation oder im Zeilentypausdruck verwendet wurde.
-
Wenn Spaltenaliase angegeben werden, überschreiben die Aliase bereits vorhandene Spalten- oder Zeilenfeldnamen. Wenn der Auswahlausdruck keine Spaltennamen enthält, werden anonyme Spaltennamen (,,
_col2, ...) mit einem Nullindex in der_col0Ausgabe_col1angezeigt. -
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.
-
- FROMfrom_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.
-
-
- [Zustand] WHERE
-
Filtert Ergebnisse nach dem von Ihnen angegebenen
condition, wobeiconditionim Allgemeinen die folgende Syntax hat.column_nameoperatorvalue[[[AND | OR]column_nameoperatorvalue] ...]Das Tool
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')
-
- [GROUPVON [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. - [Bedingung] HAVING
-
Wird in Aggregatfunktionen und der
GROUP BY-Klausel verwendet. Kontrolliert, welche Gruppen ausgewählt werden und schließt Gruppen aus, die dieconditionnicht erfüllen. 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. - [ORDERBY-Ausdruck [ASC|DESC] [NULLSFIRST|] [,... NULLSLAST]]
-
Sortiert eine Ergebnisgruppe nach einem oder mehreren Ausgabe-
expression.Wenn die Klausel mehrere Ausdrücke enthält, wird die Ergebnisgruppe nach dem ersten
expressionsortiert. 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. Die Standardsortierreihenfolge ist aufsteigend (ASC). Die Standardnullsortierung istNULLS LASTunabhängig von auf- oder absteigender Sortierreihenfolge. - [OFFSETzählen [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[zählen |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] (Prozentsatz)
-
Optionaler Operator zur Auswahl von Zeilen aus einer Tabelle basierend auf einer Stichprobenmethode.
Mit
BERNOULLIwird jede Zeile mit einer Wahrscheinlichkeit vonpercentageals Teil der Stichprobe ausgewählt. 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 | Führen Sie SQL-Abfragen in Amazon Athena aus |
Mit SELECT eine Tabelle erstellen |
Erstellen Sie eine 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 |
Abfrage mit benutzerdefinierten Funktionen |
| Metadaten des Datenkatalogs abfragen | Fragen Sie die ab AWS Glue Data Catalog |