Direkt zum Inhalt

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

Lesedauer: 3 Minute
0

Ich möchte, dass die Ergebnisse meiner Amazon Athena-Abfrage die Speicherorte der Amazon Simple Storage Service (Amazon S3)-Quelldateien für jede Zeile in den Ergebnissen zurückgeben.

Kurzbeschreibung

Du kannst Athena-Abfragen schreiben, die die Pfade der Quelldateien für die von deiner Abfrage zurückgegebenen Daten zurückgeben.

  • Um die Amazon S3-Datei zu finden, die Daten enthält, die von einer bestimmten Zeile in einer Athena-Tabelle zurückgegeben werden, führe eine SELECT $path-Abfrage aus.
  • Um die Athena-Tabellenzeilen zu finden, die einer bestimmten Amazon S3-Datei zugeordnet sind, führe eine SELECT-Abfrage mit der WHERE $path-Bedingung aus.

Lösung

Voraussetzungen: Bevor du die Abfragen in diesem Artikel ausführst, musst du über Folgendes verfügen:

  • Ein Athena-Tisch. Wenn du keine Tabelle hast, führe 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.

S3-Datei suchen, die einer Zeile aus deiner Athena-Tabelle zugeordnet ist

Um den Pfad der S3-Quelldatei für eine Zeile aus deiner Athena-Tabelle zu finden, führe Abfragen aus, die den folgenden Beispielen ähneln:

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

    SELECT * FROM "my_database"."my_table" WHERE year=2019;
  2. Führe 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 vorherige Abfrage gibt den Amazon S3-Pfad für die Daten zurück:

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

Athena-Tabellenzeilen suchen, die aus einer bestimmten S3-Datei stammen

Gehe wie folgt vor, um alle Zeilen aus deiner Athena-Tabelle zu finden, die eine bestimmte S3-Quelldatei haben:

  1. Bestätige den Namen und Speicherort des Amazon S3-Objekts, für das du Zeilen abrufen möchtest. Wenn du den Objektnamen und den Speicherort nicht kennst, führe den Befehl ls aus, um Objekte unter einem bestimmten S3-Bucket oder -Präfix aufzulisten. Ersetze im folgenden Beispiel s3://awsexamplebucket/my_table/my_partition/ durch deinen Partitionspfad.

    aws s3 ls s3://awsexamplebucket/my_table/my_partition/
  2. Führe in Athena eine SELECT-Abfrage für deine 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 vorherige Abfrage gibt Daten zurück, die aus dem Amazon S3-Pfad stammen, den du angegeben hast:

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'

Athena-Abfragen unterstützen Platzhalterfunktionen mit der Funktion regexp_like. Um beispielsweise Daten zurückzugeben, die aus allen Quelldateien stammen, die eine gemeinsame Zeichenfolge in ihrem Pfad haben, führe eine Abfrage wie diese aus:

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

Diese Abfrage gibt alle Zeilen mit Dateipfadnamen zurück, die file-1 enthalten:

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

Ähnliche Informationen

Parkett Serde

Verbindung zu Datenquellen herstellen

Dateispeicherorte für Quelldaten in Amazon S3 abrufen

AWS OFFICIALAktualisiert vor 2 Jahren