View a markdown version of this page

Daten in mehreren Dateien in Amazon S3 verbinden - AWS Glue DataBrew Entwicklerhandbuch

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.

Daten in mehreren Dateien in Amazon S3 verbinden

Mit der DataBrew Konsole können Sie in Amazon S3 S3-Buckets und -Ordnern navigieren und eine Datei für Ihren Datensatz auswählen. Ein Datensatz muss jedoch nicht auf eine Datei beschränkt sein.

Angenommen, Sie haben einen S3-Bucket mit dem Namenmy-databrew-bucket, der einen Ordner mit dem Namen enthältdatabrew-input. Nehmen wir an, Sie haben in diesem Ordner eine Reihe von JSON-Dateien, die alle dasselbe Dateiformat und dieselbe .json Dateierweiterung haben. Auf der Konsole können Sie eine Quell-URL von angebens3://my-databrew-bucket/databrew-input/. Auf der DataBrew Konsole können Sie dann diesen Ordner auswählen. Ihr Datensatz besteht aus allen JSON-Dateien in diesem Ordner.

DataBrew kann alle Dateien in einem S3-Ordner verarbeiten, aber nur, wenn die folgenden Bedingungen zutreffen:

  • Alle Dateien im Ordner haben dasselbe Format.

  • Alle Dateien im Ordner haben dieselbe Dateierweiterung.

Weitere Informationen zu unterstützten Dateiformaten und Erweiterungen finden Sie unterDataBrew input formats.

Schemas bei der Verwendung mehrerer Dateien als Datensatz

Wenn Sie mehrere Dateien als DataBrew Datensatz verwenden, müssen die Schemas für alle Dateien identisch sein. Andernfalls versucht der Projektarbeitsbereich automatisch, eines der Schemas aus den mehreren Dateien auszuwählen, und versucht, die restlichen Datensatzdateien an dieses Schema anzupassen. Dieses Verhalten führt dazu, dass die Ansicht, die in Project Workspace angezeigt wird, unregelmäßig ist, sodass auch die Jobausgabe unregelmäßig ist.

Wenn Ihre Dateien unterschiedliche Schemas haben müssen, müssen Sie mehrere Datensätze erstellen und diese separat profilieren.

Verwenden von parametrisierten Pfaden für Amazon S3

In einigen Fällen möchten Sie vielleicht einen Datensatz mit Dateien erstellen, die einer bestimmten Namenskonvention folgen, oder einen Datensatz, der sich über mehrere Amazon S3 S3-Ordner erstrecken kann. Oder vielleicht möchten Sie denselben Datensatz für identisch strukturierte Daten wiederverwenden, die regelmäßig an einem S3-Speicherort generiert werden, deren Pfad von bestimmten Parametern abhängt. Ein Beispiel ist ein Pfad, der nach dem Datum der Datenproduktion benannt ist.

DataBrew unterstützt diesen Ansatz mit parametrisierten S3-Pfaden. Ein parametrisierter Pfad ist eine Amazon S3 S3-URL, die reguläre Ausdrücke oder benutzerdefinierte Pfadparameter oder beides enthält.

Definition eines Datensatzes mit einem S3-Pfad unter Verwendung regulärer Ausdrücke

Reguläre Ausdrücke im Pfad können nützlich sein, um mehrere Dateien aus einem oder mehreren Ordnern zuzuordnen und gleichzeitig nicht verwandte Dateien in diesen Ordnern herauszufiltern.

Hier sind ein paar Beispiele:

  • Definieren Sie einen Datensatz, der alle JSON-Dateien aus einem Ordner enthält, dessen Name mit beginntinvoice.

  • Definieren Sie einen Datensatz, der alle Dateien in Ordnern mit 2020 ihren Namen enthält.

Sie können diese Art von Ansatz implementieren, indem Sie reguläre Ausdrücke in einem S3-Pfad eines Datensatzes verwenden. Diese regulären Ausdrücke können jede Teilzeichenfolge im Schlüssel der S3-URL ersetzen (aber nicht den Bucket-Namen).

Ein Beispiel für einen Schlüssel in einer S3-URL finden Sie im Folgenden. Hier my-bucket ist der Bucket-Name, US East (Ohio) ist die AWS Region und puppy.png der Schlüsselname.

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

In einem parametrisierten S3-Pfad werden alle Zeichen zwischen zwei spitzen Klammern (<und>) als reguläre Ausdrücke behandelt. Zwei Beispiele sind die folgenden:

  • s3://my-databrew-bucket/databrew-input/invoice<.*>/data.jsonentspricht allen benannten data.json Dateien in allen Unterordnerndatabrew-input, deren Namen mit invoice beginnen.

  • s3://my-databrew-bucket/databrew-input/<.*>2020<.*>/stimmt mit allen Dateien in Ordnern überein, die 2020 in ihren Namen vorkommen.

Entspricht in diesen .* Beispielen null oder mehr Zeichen.

Anmerkung

Sie können reguläre Ausdrücke nur im Schlüsselteil des S3-Pfads verwenden — dem Teil, der nach dem Bucket-Namen steht. Ist also gültig, s3://my-databrew-bucket/<.*>-input/ ist es aber s3://my-<.*>-bucket/<.*>-input/ nicht.

Wir empfehlen Ihnen, Ihre regulären Ausdrücke zu testen, um sicherzustellen, dass sie nur den gewünschten S3-URLs entsprechen und nicht den URLs, die Sie nicht möchten.

Hier sind einige andere Beispiele für reguläre Ausdrücke:

  • <\d{2}>entspricht einer Zeichenfolge, die aus genau zwei aufeinanderfolgenden Ziffern besteht, zum Beispiel 07 oder03, aber nicht1a2.

  • <[a-z]+.*>entspricht einer Zeichenfolge, die mit einem oder mehreren lateinischen Kleinbuchstaben beginnt und nach der kein oder mehrere weitere Zeichen folgen. Ein Beispiel ista3, oder abc/defa-z, aber nichtA2.

  • <[^/]+>entspricht einer Zeichenfolge, die beliebige Zeichen außer einem Schrägstrich (/) enthält. In einer S3-URL werden Schrägstriche verwendet, um Ordner im Pfad zu trennen.

  • <.*=.*>entspricht einer Zeichenfolge, die ein Gleichheitszeichen (=) enthält, z. B.month=02, oder abc/day=2=10, aber nicht. test

  • <\d.*\d>entspricht einer Zeichenfolge, die mit einer Ziffer beginnt und endet und zwischen den Ziffern beliebige andere Zeichen enthalten kann, z. B.1abc2, oder 01-02-032020/Jul/21, aber nicht. 123a

Definieren eines Datensatzes mit einem S3-Pfad mithilfe benutzerdefinierter Parameter

Die Definition eines parametrisierten Datensatzes mit benutzerdefinierten Parametern bietet Vorteile gegenüber der Verwendung regulärer Ausdrücke, wenn Sie möglicherweise Parameter für einen S3-Standort angeben möchten:

  • Sie können dieselben Ergebnisse wie mit einem regulären Ausdruck erzielen, ohne die Syntax für reguläre Ausdrücke kennen zu müssen. Sie können Parameter mit vertrauten Begriffen wie „beginnt mit“ und „enthält“ definieren.

  • Wenn Sie einen dynamischen Datensatz mithilfe von Parametern im Pfad definieren, können Sie einen Zeitraum in Ihre Definition aufnehmen, z. B. „letzter Monat“ oder „letzte 24 Stunden“. Auf diese Weise wird Ihre Datensatzdefinition später für neue eingehende Daten verwendet.

Hier sind einige Beispiele dafür, wann Sie dynamische Datensätze verwenden sollten:

  • Um mehrere Dateien, die nach dem Datum der letzten Aktualisierung oder anderen aussagekräftigen Attributen partitioniert sind, zu einem einzigen Datensatz zu verbinden. Sie können diese Partitionsattribute dann als zusätzliche Spalten in einem Datensatz erfassen.

  • Um Dateien in einem Datensatz auf S3-Speicherorte zu beschränken, die bestimmte Bedingungen erfüllen. Nehmen wir zum Beispiel an, dass Ihr S3-Pfad datumsbasierte Ordner wie enthält. folder/2021/04/01/ In diesem Fall können Sie das Datum parametrisieren und es auf einen bestimmten Bereich beschränken, z. B. „zwischen dem 01. März 2021 und dem 01. April 2021“ oder „Letzte Woche“.

Um einen Pfad mithilfe von Parametern zu definieren, definieren Sie die Parameter und fügen Sie sie Ihrem Pfad im folgenden Format hinzu:

s3://my-databrew-bucket/some-folder/{parameter1}/file-{parameter2}.json

Anmerkung

Wie bei regulären Ausdrücken in einem S3-Pfad können Sie Parameter nur im Schlüsselteil des Pfads verwenden — dem Teil, der nach dem Bucket-Namen steht.

In einer Parameterdefinition sind zwei Felder erforderlich: Name und Typ. Der Typ kann Zeichenfolge, Zahl oder Datum sein. Parameter des Typs Datum müssen eine Definition des Datumsformats haben, damit Datumswerte korrekt interpretiert und verglichen werden DataBrew können. Optional können Sie Übereinstimmungsbedingungen für einen Parameter definieren. Sie können sich auch dafür entscheiden, passende Werte eines Parameters als Spalte zu Ihrem Datensatz hinzuzufügen, wenn dieser durch einen DataBrew Job oder eine interaktive Sitzung geladen wird.

Beispiel

Betrachten wir ein Beispiel für die Definition eines dynamischen Datensatzes mithilfe von Parametern in der DataBrew Konsole. Gehen Sie in diesem Beispiel davon aus, dass die Eingabedaten regelmäßig unter Verwendung von Speicherorten wie diesen in einen S3-Bucket geschrieben werden:

  • s3://databrew-dynamic-datasets/new-cases/UR/daily-report-2021-03-30.csv

  • s3://databrew-dynamic-datasets/new-cases/UR/daily-report-2021-03-31.csv

  • s3://databrew-dynamic-datasets/new-cases/US/daily-report-2021-03-30.csv

  • s3://databrew-dynamic-datasets/new-cases/US/daily-report-2021-03-31.csv

Hier gibt es zwei dynamische Teile: einen Ländercode, wie in den USA, und ein Datum im Dateinamen wie 2021-03-30. Hier können Sie dasselbe Bereinigungsrezept für alle Dateien anwenden. Nehmen wir an, Sie möchten Ihre Bereinigungsaufgabe täglich durchführen. Im Folgenden erfahren Sie, wie Sie einen parametrisierten Pfad für dieses Szenario definieren können:

  1. Navigieren Sie zu einer bestimmten Datei.

  2. Wählen Sie dann einen variierenden Teil aus, z. B. ein Datum, und ersetzen Sie ihn durch einen Parameter. Ersetzen Sie in diesem Fall ein Datum.

    S3-Pfad mit dem Datum 2021-03-23, das durch einen Parameter ersetzt werden soll.
  3. Öffnen Sie das Kontextmenü (Rechtsklick) für Benutzerdefinierten Parameter erstellen und legen Sie dessen Eigenschaften fest:

    • Name: Berichtsdatum

    • Typ: Datum

    • Datumsformat: yyyy- MM-dd (ausgewählt aus den vordefinierten Formaten)

    • Bedingungen (Zeitraum): Letzte 24 Stunden

    • Als Spalte hinzufügen: true (aktiviert)

    Behalten Sie die Standardwerte für andere Felder bei.

  4. Wählen Sie Erstellen aus.

Danach sehen Sie den aktualisierten Pfad wie im folgenden Screenshot.

S3-Pfad mit Parameter-Platzhalter, der 6 passende Dateien anzeigt, die im Bucket gefunden wurden.

Jetzt können Sie dasselbe für den Ländercode tun und ihn wie folgt parametrisieren:

  • Name: Landesvorwahl

  • Typ: Zeichenfolge

  • Als Spalte hinzufügen: wahr (aktiviert)

Sie müssen keine Bedingungen angeben, wenn alle Werte relevant sind. In dem new-cases Ordner haben wir beispielsweise nur Unterordner mit Länderkennzahlen, sodass keine Bedingungen erforderlich sind. Wenn Sie andere Ordner ausschließen möchten, könnten Sie die folgende Bedingung verwenden.

Zeichenkettenwertfeld, das das Regex-Muster A-Z gefolgt von 2 in Klammern enthält.

Bei diesem Ansatz werden die Unterordner neuer Fälle auf zwei lateinische Großbuchstaben beschränkt.

Nach dieser Parametrisierung haben Sie nur noch passende Dateien in unserem Datensatz und können Datensatz erstellen wählen.

Anmerkung

Wenn Sie relative Zeitbereiche in Bedingungen verwenden, werden die Zeitbereiche beim Laden des Datensatzes ausgewertet. Dies gilt unabhängig davon, ob es sich um vordefinierte Zeitbereiche wie „Letzte 24 Stunden“ oder um benutzerdefinierte Zeitbereiche wie „vor 5 Tagen“ handelt. Dieser Bewertungsansatz gilt unabhängig davon, ob der Datensatz während der Initialisierung einer interaktiven Sitzung oder während eines Jobstarts geladen wird.

Nachdem Sie „Datensatz erstellen“ ausgewählt haben, ist Ihr dynamischer Datensatz einsatzbereit. Sie können es beispielsweise zunächst verwenden, um ein Projekt zu erstellen und in einer interaktiven DataBrew Sitzung ein Bereinigungsrezept zu definieren. Dann könnten Sie einen Job erstellen, der für die tägliche Ausführung geplant ist. Bei diesem Job wird das Bereinigungsrezept möglicherweise auf die Datensatzdateien angewendet, die zu dem Zeitpunkt, zu dem der Job gestartet wird, die Bedingungen Ihrer Parameter erfüllen.

Unterstützte Bedingungen für dynamische Datensätze

Sie können Bedingungen verwenden, um übereinstimmende S3-Dateien anhand von Parametern oder dem Datumsattribut der letzten Änderung zu filtern.

Im Folgenden finden Sie eine Liste der unterstützten Bedingungen für jeden Parametertyp.

Bedingungen, die mit Zeichenkettenparametern verwendet werden
Name im DataBrew SDK SDK-Synonyme Name in der DataBrew Konsole Description

ist

eq, ==

Ist genau

Der Wert des Parameters entspricht dem Wert, der in der Bedingung angegeben wurde.

ist nicht

nicht eq,! =

Ist nicht

Der Wert des Parameters entspricht nicht dem Wert, der in der Bedingung angegeben wurde.

enthält

Enthält

Der Zeichenkettenwert des Parameters enthält den Wert, der in der Bedingung bereitgestellt wurde.

nicht enthält

Enthält nicht

Der Zeichenkettenwert des Parameters enthält nicht den Wert, der in der Bedingung angegeben wurde.

starts_with

Beginnt mit

Der Zeichenkettenwert des Parameters beginnt mit dem Wert, der in der Bedingung angegeben wurde.

nicht starts_with

Beginnt nicht mit

Der Zeichenkettenwert des Parameters beginnt nicht mit dem Wert, der in der Bedingung angegeben wurde.

ends_with

Endet mit

Der Zeichenkettenwert des Parameters endet mit dem Wert, der in der Bedingung angegeben wurde.

nicht ends_with

Endet nicht mit

Der Zeichenkettenwert des Parameters endet nicht mit dem Wert, der in der Bedingung angegeben wurde.

Streichhölzer

Entspricht

Der Wert des Parameters entspricht dem in der Bedingung angegebenen regulären Ausdruck.

stimmt nicht überein

Stimmt nicht überein

Der Wert des Parameters entspricht nicht dem in der Bedingung angegebenen regulären Ausdruck.

Anmerkung

Bei allen Bedingungen für String-Parameter wird die Groß- und Kleinschreibung berücksichtigt. Wenn Sie sich nicht sicher sind, welche Groß- und Kleinschreibung in einem S3-Pfad verwendet wird, können Sie die Bedingung „entspricht“ mit einem regulären Ausdruckswert verwenden, der mit (?i) beginnt. Dies führt zu einem Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung.

Nehmen wir zum Beispiel an, dass Ihr Zeichenkettenparameter mitabc, aber auch mit Abc oder ABC beginnen soll. In diesem Fall können Sie die Bedingung „entspricht“ (?i)^abc als Bedingungswert verwenden.

Bedingungen, die mit Zahlenparametern verwendet werden
Name im DataBrew SDK SDK-Synonyme Name in der DataBrew Konsole Description

ist

eq, ==

Ist genau

Der Wert des Parameters entspricht dem Wert, der in der Bedingung angegeben wurde.

ist nicht

nicht eq,! =

Ist nicht

Der Wert des Parameters entspricht nicht dem Wert, der in der Bedingung angegeben wurde.

kleiner_als

lt, <

Kleiner als

Der numerische Wert des Parameters ist kleiner als der Wert, der in der Bedingung angegeben wurde.

less_than_equal

spät, <=

Kleiner als oder gleich

Der numerische Wert des Parameters ist kleiner oder gleich dem Wert, der in der Bedingung angegeben wurde.

größer_als

gt, >

Größer als

Der numerische Wert des Parameters ist größer als der Wert, der in der Bedingung angegeben wurde.

greater_than_equal

erhalten, =>

Größer als oder gleich

Der numerische Wert des Parameters ist größer oder gleich dem Wert, der in der Bedingung angegeben wurde.

Mit Date-Parametern verwendete Bedingungen
Name im DataBrew SDK Name in der DataBrew Konsole Format für Bedingungswerte (SDK) Description

after

Starten

ISO 8601-Datumsformat wie oder 2021-03-30T01:00:00Z 2021-03-30T01:00-07:00

Der Wert des Datumsparameters liegt nach dem in der Bedingung angegebenen Datum.

before

Ende

ISO 8601-Datumsformat wie oder 2021-03-30T01:00:00Z 2021-03-30T01:00-07:00

Der Wert des Datumsparameters liegt vor dem in der Bedingung angegebenen Datum.

relative_after

Start (relativ)

Positive oder negative Anzahl von Zeiteinheiten, wie -48h oder+7d.

Der Wert des Datumsparameters liegt nach dem in der Bedingung angegebenen relativen Datum.

Relative Daten werden ausgewertet, wenn der Datensatz geladen wird, entweder wenn eine interaktive Sitzung initialisiert wird oder wenn ein zugehöriger Job gestartet wird. Dies ist der Moment, der in den Beispielen „jetzt“ genannt wird.

relative_before

Ende (relativ)

Positive oder negative Anzahl von Zeiteinheiten, wie -48h oder+7d.

Der Wert des Datumsparameters liegt vor dem in der Bedingung angegebenen relativen Datum.

Relative Daten werden ausgewertet, wenn der Datensatz geladen wird, entweder wenn eine interaktive Sitzung initialisiert wird oder wenn ein zugehöriger Job gestartet wird. Dies ist der Moment, der in den Beispielen „jetzt“ genannt wird.

Wenn Sie das SDK verwenden, geben Sie relative Daten im folgenden Format an:±{number_of_time_units}{time_unit}. Sie können diese Zeiteinheiten verwenden:

  • -1h (vor 1 Stunde)

  • +2d (in 2 Tagen)

  • -120m (vor 120 Minuten)

  • 5000s (in 5.000 Sekunden von jetzt an)

  • -3w (vor 3 Wochen)

  • +4M (in 4 Monaten)

  • -1y (vor 1 Jahr)

Relative Daten werden ausgewertet, wenn der Datensatz geladen wird, entweder wenn eine interaktive Sitzung initialisiert wird oder wenn ein zugehöriger Job gestartet wird. Dies ist der Moment, der in den vorangegangenen Beispielen „jetzt“ genannt wird.

Einstellungen für dynamische Datensätze konfigurieren

Neben der Bereitstellung eines parametrisierten S3-Pfads können Sie auch andere Einstellungen für Datensätze mit mehreren Dateien konfigurieren. Diese Einstellungen filtern S3-Dateien nach ihrem letzten Änderungsdatum und begrenzen die Anzahl der Dateien.

Ähnlich wie beim Einstellen eines Datumsparameters in einem Pfad können Sie einen Zeitraum definieren, in dem passende Dateien aktualisiert wurden, und nur diese Dateien in Ihren Datensatz aufnehmen. Sie können diese Bereiche entweder mit absoluten Daten wie „30. März 2021“ oder mit relativen Zeiträumen wie „Letzte 24 Stunden“ definieren.

Geben Sie das im Dropdownmenü Letzte 24 Stunden aktivierte Kontrollkästchen für den Zeitraum der letzten Aktualisierung an.

Um die Anzahl der passenden Dateien zu begrenzen, wählen Sie eine Anzahl von Dateien aus, die größer als 0 ist, und wählen Sie aus, ob Sie die neuesten oder die ältesten übereinstimmenden Dateien verwenden möchten.

Das Kontrollkästchen „Anzahl der Dateien angeben“, die in das Dropdownmenü „Letzte“ aufgenommen werden sollen, und für 10 Dateien ist aktiviert.