Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Warum erhalte ich keine Datensätze, wenn ich meine Amazon-Athena-Tabelle abfrage?
Ich habe in Amazon Athena eine CREATE-TABLE (Tabelle erstellen)-Anweisung mit den erwarteten Spalten und ihren Datentypen ausgeführt. Wenn ich jedoch die Tabellennamenabfrage „SELECT * FROM“ ausführe, erhalte ich die Ausgabe „Zero records returned“.
Lösung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Es gibt mehrere Gründe, warum die Tabellennamenabfrage „SELECT\ * FROM“ möglicherweise keine Datensätze zurückgibt. Je nach Anwendungsfall findest du im entsprechenden Abschnitt häufig auftretende Gründe und Schritte zur Problembehandlung.
Problembehandlung bei AWS-Glue-Partitionen
Überprüfen deiner Crawler-Einstellungen
Wenn du einen Crawler verwendest, stelle sicher, dass der Crawler auf den Amazon Simple Storage Service (Amazon S3)-Bucket verweist und nicht auf eine bestimmte Datei. Verwende beispielsweise s3://amzn-s3-demo-bucket/new anstelle von s3://amzn-s3-demo-bucket/new/data.json.
Verwenden des richtigen LOCATION (Speicherort)-Pfads
Stelle sicher, dass der Amazon-S3-LOCATION-Pfad für die Eingabedaten korrekt ist. Stelle außerdem sicher, dass der S3-Bucket-Pfad keine Datei oder Platzhalter enthält. Verwende beispielsweise die s3://amzn-s3-demo-bucket/new-LOCATION anstelle von s3://amzn-s3-demo-bucket/new/data.json.
Verwenden eines einzelnen Schrägstrichs im LOCATION-Pfad
In Athena kannst du keine Pfade für Tabellenspeicherorte verwenden, die einen doppelten Schrägstrich (//) enthalten. Beispielsweise gibt der folgende LOCATION-Pfad leere Ergebnisse zurück: s3://amzn-s3-demo-bucket/myprefix//input//
Um die Dateien an einen Speicherort ohne doppelte Schrägstriche zu kopieren, führe den folgenden cp-AWS-CLI-Befehl aus:
aws s3 cp s3://amzn-s3-demo-bucket/myprefix//input// s3://amzn-s3-demo-bucket/myprefix/input/ --recursive
Hinweis: Ersetze amzn-s3-demo-bucket/myprefix//input// durch deinen aktuellen Pfad zum Speicherort der Tabelle und amzn-s3-demo-bucket/myprefix/input/ durch deinen neuen Pfad zum Speicherort der Tabelle.
Es hat sich bewährt, nur Unterstriche oder Großbuchstaben in die Spaltennamen der Tabelle aufzunehmen. Du kannst beispielsweise einer Spalte den Namen table_name geben, nicht aber den Namen table-name.
Hinweis: AWS Glue und Athena können keine Binnenmajuskeln, Großbuchstaben oder Sonderzeichen außer dem Unterstrich lesen.
Erstellen von Amazon-S3-Präfixen für jede Tabelle
AWS-Glue-Crawler erstellen separate Tabellen für Daten, die im selben Amazon-S3-Präfix gespeichert sind. Wenn du diese Tabellen jedoch in Athena abfragst, erhältst du keine Datensätze. Die Athena-Abfrage gibt beispielsweise keine Datensätze zurück, wenn der Tabellenspeicherort den folgenden Beispielen ähnelt:
- s3://amzn-s3-demo-bucket/table1.csv
- s3://amzn-s3-demo-bucket/table2.csv
Um dieses Problem zu lösen, erstelle für jede Tabelle individuelle Amazon-S3-Präfixe, ähnlich wie in den folgenden Beispielen:
- s3://amzn-s3-demo-bucket/table1/table1.csv
- s3://amzn-s3-demo-bucket/table2/table2.csv
Führe dann die folgende Abfrage aus, um den Speicherort für die Tabelle zu aktualisieren:
ALTER TABLE table1 SET LOCATION 's3://amzn-s3-demo-bucket/table1';
Hinweis: Ersetze amzn-s3-demo-bucket durch deinen Bucket-Namen und table1 durch deinen Tabellennamen.
Laden der Partitionen
Athena erstellt Metadaten nur, wenn du eine Tabelle erstellst. Die Daten werden nur analysiert, wenn du die Abfrage ausführst. Wenn die Tabelle definierte Partitionen hat, hat AWS Glue Data Catalog oder der interne Athena-Datenkatalog die Partitionen möglicherweise nicht geladen.
Wenn Athena das Format der Partitionen unterstützt, führe MSCK REPAIR TABLE aus, um die Metadaten einer Partition in den Katalog zu laden. Du hast beispielsweise eine Tabelle, die nach Jahr partitioniert ist. In diesem Fall erwartet Athena, die Daten auf Amazon-S3-Pfaden zu finden, ähnlich wie in den folgenden Beispielen:
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2020/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2019/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2018/data.csv
Wenn die Daten auf den Amazon-S3-Pfaden existieren, die Athena erwartet, repariere die Tabelle mit einem Befehl, der dem folgenden ähnelt:
CREATE EXTERNAL TABLE Employee ( Id INT, Name STRING, Address STRING ) PARTITIONED BY (year INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/';
Nachdem Athena die Tabelle erstellt hat, führe den folgenden Befehl aus, um die Partitionsinformationen zu laden:
MSCK REPAIR TABLE Employee;
Nachdem Athena die Daten geladen hat, führe die folgende Abfrage erneut aus:
SELECT * FROM Employee;
Wenn Athena das Format der Partitionen nicht unterstützt oder sich die Partitionen in unterschiedlichen Amazon-S3-Pfaden befinden, führe ALTER TABLE ADD PARTITION für jede Partition aus.
Die Daten befinden sich beispielsweise in diesen Amazon-S3-Beispielpfaden:
- s3://amzn-s3-demo-bucket/athena/inputdata/2020/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/2019/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/2018/data.csv
Führe für die vorherigen Pfade einen Befehl aus, der dem folgenden Beispiel ähnelt:
ALTER TABLE Employee ADD PARTITION (year=2020) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2020/' PARTITION (year=2019) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2019/' PARTITION (year=2018) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2018/'
Nachdem Athena die Daten geladen hat, führe die folgende Abfrage erneut aus:
SELECT * FROM Employee;
Überprüfen der Dateinamen
Stelle sicher, dass die Dateinamen nicht mit einem Unterstrich oder Punkt beginnen.
Wenn du eine Abfrage verarbeitest, betrachtet Athena diese Dateien als Platzhalter und ignoriert sie. Wenn alle Dateien im Amazon-S3-Pfad Namen haben, die mit einem Unterstrich oder Punkt beginnen, erhältst du keine Datensätze.
Wenn du beispielsweise eine Abfrage mit den folgenden Dateien im Amazon-S3-Pfad verarbeitest, erhältst du keine Datensätze:
- s3://amzn-s3-demo-bucket/athena/inputdata/_file1
- s3://amzn-s3-demo-bucket/athena/inputdata/.file2
Hinweis: Wenn der Amazon-S3-Pfad Platzhalter und Dateien enthält, die mit anderen Zeichen beginnen, ignoriert Athena nur die Platzhalter und fragt die anderen Dateien ab. Infolgedessen erhältst du möglicherweise einen oder mehrere Datensätze.
Problembehandlung bei der Partitionsprojektion
Sich vergewissern, dass die Werte innerhalb der Bereichsgrenzen liegen
Wenn die Werte außerhalb der für die Partitionsprojektion definierten Bereichsgrenzen liegen, gibt die Abfrage keine Zeilen zurück.
Die Daten beginnen beispielsweise im Jahr 2020 und du definierst sie wie folgt: projection.timestamp.range'='2020/01/01,NOW
Wenn du die folgende Abfrage ausführst, wird die Abfrage erfolgreich abgeschlossen, es werden jedoch keine Zeilen zurückgegeben:
SELECT * FROM table-name WHERE timestamp = '2019/02/02'
Überprüfen des Partitionierungsschemas der Speichervorlage
Wenn der Amazon-S3-Speicherort nicht das Speicherortmuster .../column=value... verwendet, musst du ein benutzerdefiniertes Amazon-S3-Partitionierungsschema angeben. Wenn du kein benutzerdefiniertes Schema definierst, gibt die Abfrage keine Datensätze zurück.
Verwenden der richtigen benutzerdefinierten Speichervorlage
Wenn du eine benutzerdefinierte Vorlage verwendest, stelle sicher, dass die Vorlage es Athena ermöglicht, die Partitionsspeicherorte zu erstellen. Stelle außerdem sicher, dass jeder Platzhalter und der Amazon-S3-Pfad mit einem einzigen Schrägstrich enden.
Du definierst beispielsweise eine Partitionsspalte nach Jahr mit der Datenbeschreibungssprach (DDL)-Anweisung PARTITIONED BY (year string), und der Speicherort ist s3://amzn-s3-demo-bucket/athena/inputdata/Year=2022/. Dieser Speicherort gibt keine Datensätze zurück. Um dieses Problem zu beheben, aktualisiere den Speicherort auf s3://amzn-s3-demo-bucket/athena/inputdata/Year=${year}.
Überprüfen der Partitionseigenschaften
Wenn du Partitionsspalten mit den Partitionsspaltentypen Aufzählung, ganze Zahl, Datum oder eingefügt hast, stelle sicher, dass du die Partitionseigenschaften richtig konfigurierst. Die Konfiguration muss es Athena ermöglichen, Partitionsspeicherorte zu erstellen, die der Struktur der Daten auf Amazon S3 entsprechen.
Du verfügst beispielsweise über zeitbezogene Daten, die täglich 1 Stunde nach Mitternacht am Speicherort s3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-01-00 eingehen.
In diesem Beispiel verwendet die Athena-Tabelle die folgenden Partitionseigenschaften:
'projection.dt.format' = 'yyyy-MM-dd-HH-mm','projection.dt.range' = '2022-01-01-00-00,NOW', 'projection.dt.interval' = '1', 'projection.dt.interval.unit' = 'DAYS'
Abfragen, die in der Beispieltabelle ausgeführt werden, geben keine Datensätze zurück, da die Dateispeicherorte der Eigenschaft „Mitternacht“ entsprechen s3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-00-00.
Um dieses Problem zu beheben, setze die Eigenschaft projection.dt.range auf 2022-01-01-01-00,NOW.
Ähnliche Informationen
Erstellen von Tabellen in Athena
- Themen
- Analytics
- Tags
- Amazon Athena
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren