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 undSQLAbfragen in Amazon Athena ausführen. 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
WITH
kö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
WITH
geht 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_query
lautet:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
Wobei gilt:
-
subquery_table_name
ist ein eindeutiger Name für eine temporäre Tabelle, die die Ergebnisse der Unterabfrage mitWITH
-Klausel definiert. Jedesubquery
muss 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 dersubquery
definiert wird. -
subquery
ist eine Abfrageanweisung.
-
- [ALL|] Ausdruck_auswählen DISTINCT
-
select_expression
legt die auszuwählenden Zeilen fest. Aselect_expression
kann 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_alias
Syntax gibt einen benutzerdefinierten Überschriftennamen an, der für die Spalte in der Ausgabe verwendet werden soll. -
For
row_expression.* [ AS ( column_alias [, ...] ) ]
row_expression
ist ein beliebiger Ausdruck eines DatentypsROW
. Die Felder der Zeile definieren die Ausgabespalten, die im Ergebnis enthalten sein sollen. -
Denn
relation.*
die Spalten vonrelation
sind 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_col0
Ausgabe_col1
angezeigt. -
ALL
ist die Standardeinstellung. Bei Verwendung vonALL
wird 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_item
eine Ansicht, ein JOIN-Konstrukt oder eine Unterabfrage wie unten beschrieben sein kann.from_item
kann eines der Folgenden sein:-
table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]
Hier ist
table_name
der Name der Zieltabelle, aus der Zeilen ausgewählt werden.alias
ist der Name für die Ausgabe derSELECT
-Anweisung undcolumn_alias
definiert die Spalten für den angegebenenalias
.
-ODER-
-
join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
Hierbei ist
join_type
eines 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_condition
die Spaltennamen für JOIN-Schlüssel in mehreren Tabellen angeben können. Für die Verwendung vonjoin_column
mussjoin_column
in beiden Tabellen vorhanden sein.
-
-
- [Zustand] WHERE
-
Filtert Ergebnisse nach dem von Ihnen angegebenen
condition
, wobeicondition
im Allgemeinen die folgende Syntax hat.column_name
operator
value
[[[AND | OR]column_name
operator
value
] ...]Das Tool
operator
kann 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_A
ANDinteger_B
varchar
ist, 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
ALL
undDISTINCT
wird festgelegt, ob für Duplikate jeweils eine eigene Ausgabezeile angelegt wird. Wenn nichts angegeben ist, wird vonALL
ausgegangen.grouping_expressions
ermö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
,AVG
oderCOUNT
, 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
,CUBE
undROLLUP
.GROUP BY GROUPING SETS
gibt mehrere Spaltenlisten an, nach denen gruppiert werden soll.GROUP BY CUBE
generiert alle möglichen Gruppierungssätze für einen gegebenen Satz von Spalten.GROUP BY ROLLUP
generiert 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 ALL
dieselben Ergebnisse erzielen wie mit diesenGROUP BY
-Operationen. Abfragen, in denenGROUP BY
verwendet wird, haben jedoch den Vorteil, dass die Daten einmalig ausgelesen werden, wohingegen beiUNION ALL
die 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 diecondition
nicht erfüllen. Diese Filterung wird nach der Berechnung der Gruppierungs- und Aggregatfunktionen ausgeführt. - [{UNION| INTERSECT |EXCEPT} [ALL|DISTINCT] union_query]]
-
UNION
,INTERSECT
undEXCEPT
kombinieren die Ergebnisse mehrererSELECT
-Anweisungen in eine einzelne Abfrage.ALL
oderDISTINCT
steuern die Eindeutigkeit der Zeilen, die in der endgültigen Ergebnismenge enthalten sind.UNION
kombiniert die Zeilen, die sich aus der ersten Abfrage ergeben, mit den Zeilen, die aus der zweiten Abfrage resultieren. Um Duplikate zu eliminieren, erstelltUNION
eine Hash-Tabelle, die Speicher verbraucht. Ziehen Sie für eine bessere Leistung die Verwendung vonUNION ALL
in 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.INTERSECT
gibt nur die Zeilen zurück, die in den Ergebnissen der ersten und der zweiten Abfrage vorhanden sind.EXCEPT
gibt die Zeilen aus den Ergebnissen der ersten Abfrage zurück, ausgenommen die Zeilen, die von der zweiten Abfrage gefunden wurden.ALL
bewirkt, dass alle Zeilen aufgenommen werden, auch wenn die Zeilen identisch sind.DISTINCT
bewirkt, 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
expression
sortiert. Danach wird der zweiteexpression
auf die Zeilen mit passenden Werten aus dem ersten Ausdruck angewendet usw.Jeder
expression
kann Ausgabespalten ausSELECT
oder eine Ordinalzahl für eine Ausgabespalte nach Position (beginnend mit 1) festlegen.ORDER BY
wird im letzten Schritt nachGROUP BY
- undHAVING
-Klauseln ausgewertet. ÜberASC
undDESC
wird festgelegt, ob die Ergebnisse in auf- oder absteigender Reihenfolge sortiert werden. Die Standardsortierreihenfolge ist aufsteigend (ASC
). Die Standardnullsortierung istNULLS LAST
unabhä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 durchOFFSET
angegebene 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 ALL
entspricht 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
BERNOULLI
wird jede Zeile mit einer Wahrscheinlichkeit vonpercentage
als Teil der Stichprobe ausgewählt. Alle physischen Blöcke der Tabelle werden gescannt und bestimmte Zeilen werden basierend auf einem Vergleich zwischen dempercentage
der Stichproben und einem zufälligen, zur Laufzeit berechneten Wert übersprungen.Mit
SYSTEM
wird 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
percentage
der 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
UNNEST
mit 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.UNNEST
wird normalerweise mit einemJOIN
verwendet und kann auf Spalten von Beziehungen links desJOIN
verweisen.
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 | SQLAbfragen in Amazon Athena ausführen |
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 |