Warum erhalte ich keine Datensätze, wenn ich meine Amazon-Athena-Tabelle abfrage?
Ich habe in Amazon Athena eine CREATE TABLE-Anweisung mit den erwarteten Spalten und ihren Datentypen ausgeführt. Wenn ich die Abfrage WÄHLEN * AUS Tabellenname ausführe, lautet die Ausgabe „Es wurden keine Datensätze zurückgegeben.“
Auflösung
Es gibt mehrere häufige Gründe, warum die Abfrage null Datensätze zurückgibt. Je nach Anwendungsfall finden Sie im entsprechenden Abschnitt häufig auftretende Gründe und Schritte zur Fehlerbehebung.
AWS Glue-Partitionen
In den Crawler-Einstellungen ausgewählte Datei
Wenn Sie einen Crawler verwenden, vergewissern Sie sich, dass der Crawler auf den Amazon Simple Storage Service (Amazon S3)-Bucket und nicht auf eine Datei verweist. Stellen Sie außerdem sicher, dass der S3-Bucket-Pfad keinen abschließenden Schrägstrich enthält. Verwenden Sie beispielsweise s3://doc-example-bucket/new statt s3://doc-example-bucket/new/data.json.
Falscher LOCATION-Pfad
Überprüfen Sie den LOCATION-Pfad von Amazon-S3 für die Eingabedaten. Wenn der eingegebene LOCATION-Pfad falsch ist, gibt Athena keine Datensätze zurück. Stellen Sie sicher, dass der S3-Bucket-Pfad keine Datei, keinen abschließenden Schrägstrich oder keinen Platzhalter enthält. Verwenden Sie beispielsweise s3://doc-example-bucket/new statt s3://doc-example-bucket/new/data.json.
Doppelter Schrägstrich im LOCATION-Pfad
Athena unterstützt keine Tabellen-Location-Pfade, die einen doppelten Schrägstrich (//) enthalten. Der folgende LOCATION-Pfad gibt beispielsweise leere Ergebnisse zurück: s3://doc-example-bucket/myprefix//input//
Um dieses Problem zu beheben, kopieren Sie die Dateien an eine Location ohne doppelte Schrägstriche. Im Folgenden finden Sie einen AWS Command Line Interface (AWS CLI)-Befehl zum Kopieren von Dateien:
aws s3 cp s3://doc-example-bucket/myprefix//input// s3://doc-example-bucket/myprefix/input/ --recursive
**Hinweis:**Wenn Sie beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhalten, finden Sie weitere Informationen unter Beheben von AWS CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
Sonderzeichen
Es hat sich bewährt, nur Unterstriche oder Großbuchstaben in die Spaltennamen Ihrer Tabelle aufzunehmen. Sie können beispielsweise einer Spalte den Namen table_name geben, nicht aber den Namen Name der Tabelle.
Hinweis: AWS Glue und Athena können keine Binnenmajuskeln, Großbuchstaben oder Sonderzeichen außer dem Unterstrich lesen.
Daten für mehrere Tabellen, die im selben S3-Präfix gespeichert sind
AWS-Glue-Crawler erstellen separate Tabellen für Daten, die im selben S3-Präfix gespeichert sind. Wenn Sie diese Tabellen jedoch in Athena abfragen, erhalten Sie keine Datensätze. Ihre Athena-Abfrage gibt beispielsweise keine Datensätze zurück, wenn Ihr Tabellen-Speicherort den folgenden Beispielen ähnelt:
- s3://doc-example-bucket/table1.csv
- s3://doc-example-bucket/table2.csv
Um dieses Problem zu beheben, erstellen Sie für jede Tabelle individuelle S3-Präfixe, die den folgenden Beispielen ähneln:
- s3://doc-example-bucket/table1/table1.csv
- s3://doc-example-bucket/table2/table2.csv
Führen Sie anschließend eine Abfrage ähnlich dem folgenden Beispiel aus, um den Speicherort für Ihre Tabelle table1 zu aktualisieren:
ALTER TABLE table1 SET LOCATION 's3://doc-example-bucket/table1';
Partitionen noch nicht geladen
Athena erstellt Metadaten nur, wenn eine Tabelle erstellt wird. Die Daten werden nur analysiert, wenn Sie die Abfrage ausführen. Wenn Ihre Tabelle über definierte Partitionen verfügt, wurden die Partitionen möglicherweise noch nicht in den AWS-Glue-Datenkatalog oder den internen Athena-Datenkatalog geladen. Verwenden Sie MSCK REPAIR TABLE oder ALTER TABLE ADD PARTITION, um die Partitionsinformationen in den Katalog zu laden.
Wenn die Partitionen in einem Format gespeichert sind, das Athena unterstützt, führen Sie MSCK REPAIR TABLE aus, um die Metadaten einer Partition in den Katalog zu laden. Wenn Sie beispielsweise eine Tabelle haben, die nach Jahr partitioniert ist, erwartet Athena, die Daten unter Amazon-S3-Pfaden zu finden, die den folgenden Beispielen ähneln:
- s3://doc-example-bucket/athena/inputdata/year=2020/data.csv
- s3://doc-example-bucket/athena/inputdata/year=2019/data.csv
- s3://doc-example-bucket/athena/inputdata/year=2018/data.csv
Wenn sich die Daten unter den von Athena erwarteten Amazon S3-Pfaden befinden, führen Sie einen Befehl ähnlich diesem Beispiel aus, um die Tabelle zu reparieren:
CREATE EXTERNAL TABLE Employee ( Id INT, Name STRING, Address STRING ) PARTITIONED BY (year INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://doc-example-bucket/athena/inputdata/';
Nachdem die Tabelle erstellt wurde, laden Sie die Partitionsinformationen:
MSCK REPAIR TABLE Employee;
Nachdem die Daten geladen wurden, führen Sie die folgende Abfrage erneut aus:
SELECT * FROM Employee;
Wenn die Partitionen nicht in einem von Athena unterstützten Format gespeichert sind oder sich unter verschiedenen S3-Pfaden befinden, führen Sie ALTER TABLE ADD PARTITION für die einzelnen Partitionen aus.
Nehmen wir zum Beispiel an, dass sich Ihre Daten unter den folgenden Amazon-S3-Pfaden befinden:
- s3://doc-example-bucket/athena/inputdata/2020/data.csv
- s3://doc-example-bucket/athena/inputdata/2019/data.csv
- s3://doc-example-bucket/athena/inputdata/2018/data.csv
Führen Sie mit diesen Pfaden einen Befehl aus, der diesem Beispiel ähnelt:
ALTER TABLE Employee ADD PARTITION (year=2020) LOCATION 's3://doc-example-bucket/athena/inputdata/2020/' PARTITION (year=2019) LOCATION 's3://doc-example-bucket/athena/inputdata/2019/' PARTITION (year=2018) LOCATION 's3://doc-example-bucket/athena/inputdata/2018/'
Nachdem die Daten geladen wurden, führen Sie die folgende Abfrage erneut aus:
SELECT * FROM Employee;
In Hive versteckte Dateien
Stellen Sie sicher, dass Ihre Dateinamen nicht mit einem Unterstrich (_) oder einem Punkt (.) beginnen.
Athena betrachtet diese Dateien als Platzhalter und ignoriert sie, wenn Sie eine Abfrage verarbeiten. Weitere Informationen finden Sie unter Athena kann versteckte Dateien nicht lesen. Wenn alle Dateien in Ihrem S3-Pfad Namen haben, die mit einem Unterstrich oder einem Punkt beginnen, erhalten Sie keine Datensätze.
Hinweis: Wenn Ihr S3-Pfad Platzhalter sowie Dateien enthält, deren Namen mit unterschiedlichen Zeichen beginnen, ignoriert Athena nur die Platzhalter und fragt die anderen Dateien ab. Daher erhalten Sie möglicherweise einen oder mehrere Datensätze.
Zum Beispiel:
- s3://doc-example-bucket/athena/inputdata/_file1
- s3://doc-example-bucket/athena/inputdata/.file2
Partitionsprojektion
Werte, die nicht innerhalb der Bereichsgrenzen für die Partitionsprojektion liegen
Abfragen nach Werten, die außerhalb der für die Partitionsprojektion definierten Bereichsgrenzen liegen, geben keinen Fehler zurück. Stattdessen gibt die Abfrage null Zeilen zurück.
Nehmen wir zum Beispiel an, Ihre Daten beginnen im Jahr 2020 und sind wie folgt definiert: projection.timestamp.range'='2020/01/01,JETZT
Wenn Sie diese Beispielabfrage ausführen, wird die Abfrage erfolgreich abgeschlossen, es werden jedoch keine Zeilen zurückgegeben:
SELECT * FROM table-name WHERE timestamp = '2019/02/02'
Die Speichervorlage folgt nicht dem Standardpartitionierungsschema
Wenn Ihre Amazon-S3-Dateispeicherorte nicht dem Location-Muster .../column=value... folgen, müssen Sie ein benutzerdefiniertes Amazon-S3-Partitionierungsschema angeben. Wenn Sie kein benutzerdefiniertes Schema definieren, gibt Ihre Abfrage null Datensätze zurück.
Wenn Sie eine benutzerdefinierte Vorlage verwenden, muss die Vorlage einen Platzhalter für jede Partitionsspalte enthalten. Informationen zum Definieren eines benutzerdefinierten S3-Partitionierungsschemas finden Sie unter Benutzerdefinierte S3-Speicherorten angeben.
Falsche benutzerdefinierte Speichervorlage
Wenn Sie eine benutzerdefinierte Vorlage verwenden, stellen Sie sicher, dass die Vorlage es Athena ermöglicht, Ihre Partitions-Locations zu erstellen. Stellen Sie außerdem sicher, dass jeder Platzhalter und der Amazon S3-Pfad mit einem einzigen Schrägstrich enden.
Nehmen wir beispielsweise an, Sie definieren eine Partitionsspalte Jahr mit der DDL-Anweisung PARTITIONIERT DURCH (Jahreszeichenfolge) und Ihre S3-Dateiposition lautet s3://doc-example-bucket/athena/inputdata/Year=2022/. Dieser Standort gibt Null Datensätze zurück. Aktualisieren Sie den Amazon S3-Speicherort auf: s3://doc-example-bucket/athena/inputdata/Year=${year}.
Partitionseigenschaften
Wenn Sie einen Partitionsspalten-Enum-, Integer- oder Datumstyp haben, stellen Sie sicher, dass Sie die Partitionseigenschaften richtig einstellen. Die Konfigurationen müssen es Athena ermöglichen, Partitions-Locations zu erstellen, die der Struktur Ihrer Daten auf Amazon S3 entsprechen.
Nehmen wir zum Beispiel an, Sie haben zeitbezogene Daten, die täglich eine Stunde nach Mitternacht an folgender Adresse eingehen: s3://doc-example-bucket/athena/inputdata/2022-01-01-01-00.
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 null Datensätze zurück. Dies liegt daran, dass die projizierten Datei-Locations der Eigenschaft Mitternacht entsprechen s3://doc-example-bucket/athena/inputdata/2022-01-01-00-00.
Um dieses Problem zu beheben, setzen Sie die Eigenschaft 'projection.dt.range' auf '2022-01-01-01-00, JETZT'.
Ähnliche Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Monat