Wie kann ich die Amazon S3-Quelldatei für eine Zeile in einer Athena-Tabelle sehen?

Lesedauer: 3 Minute
0

Ich frage eine Tabelle in Amazon Athena ab. Ich möchte herausfinden, welche Amazon Simple Storage Service (Amazon S3) Datei die Quelle für jede Zeile in der Ausgabe ist oder welche Zeilen einer bestimmten Datei entsprechen.

Kurzbeschreibung

  • Um herauszufinden, welche Amazon S3-Datei Daten enthält, die von einer bestimmten Zeile in einer Athena-Tabelle zurückgegeben werden, führen Sie eine SELECT $path-Abfrage aus.
  • Um herauszufinden, welche Athena-Tabellenzeilen mit einer bestimmten Amazon S3-Datei verknüpft sind, führen Sie eine SELECT-Abfrage mit der WHERE $path-Bedingung aus.

Diese Abfragen sind nützlich, um unerwartete Daten zu untersuchen und Abfragen zu erstellen, die Informationen zu den Quelldaten benötigen.

Behebung

Bevor Sie die folgenden Abfragen ausführen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Ein Athena-Tisch. Wenn Sie keine Tabelle haben, führen Sie eine CREATE TABLE-Anweisung aus.
  • Ein Benutzer oder eine Rolle von AWS Identity and Access Management (IAM), der über Berechtigungen zum Ausführen von Athena-Abfragen verfügt.

So finden Sie die S3-Datei, die mit einer Zeile einer Athena-Tabelle verknüpft ist:

1.    Führen Sie eine SELECT-Abfrage für Ihre Tabelle aus, um die gewünschten Daten zurückzugeben:

SELECT * FROM "my_database"."my_table" WHERE year=2019;

2.    Führen Sie eine Abfrage ähnlich der folgenden aus, um die Amazon S3-Quelldatei für die Daten zu finden:

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

Die Abfrage gibt den Amazon S3-Pfad für die Daten zurück:

s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json

Um Athena-Tabellenzeilen zurückzugeben, die aus einer bestimmten Amazon S3-Datei stammen:

1.    Bestätigen Sie den Namen und Speicherort des Amazon S3-Objekts, für das Sie Zeilen abrufen möchten. Wenn Sie den Objektnamen und den Speicherort nicht kennen, führen Sie den Befehl ls aus, um Objekte unter einem bestimmten S3-Bucket oder -Präfix aufzulisten. Ersetzen Sie im folgenden Beispiel s3://awsexamplebucket/my_table/my_partition/ durch Ihren Partitionspfad.

aws s3 ls s3://awsexamplebucket/my_table/my_partition/

2.    Führen Sie in Athena eine SELECT-Abfrage für Ihre Tabelle aus, um Daten zurückzugeben, die mit der Amazon S3-Datei verknüpft sind:

SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')

Die Abfrage gibt Daten zurück, die dem Amazon S3-Pfad entsprechen:

id    name    year    $path
3     John    1999    's3://awsexamplebucket/my_table/my_partition/file-01.csv'
4     Jane    2000    's3://awsexamplebucket/my_table/my_partition/file-01.csv'

Diese Abfrage unterstützt auch einige Platzhalterfunktionen. Um beispielsweise alle Daten zurückzugeben, die einen Teil eines Dateinamens enthalten, führen Sie eine Abfrage wie folgt aus:

SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')

Diese Abfrage gibt alle Zeilen mit Dateinamen zurück, die -02 enthalten:

id    name    year    $path
13    Mia     2009    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
14    Mary    2010    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
15    Max     2011    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
16    Merriam 2012    's3://awsexamplebucket/my_table/my_partition/file-02.csv'

Verwandte Informationen

Parkett Serde

Verbindung zu Datenquellen herstellen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren