ItemReader (Karte) - AWS Step Functions

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.

ItemReader (Karte)

Das ItemReader Feld ist ein JSON-Objekt, das einen Datensatz und seinen Speicherort angibt. Ein Distributed-Map-Status verwendet diesen Datensatz als Eingabe.

Das folgende Beispiel zeigt die Syntax des ItemReader Felds in einem JSONPathbasierten Workflow für einen Datensatz in einer durch Text getrennten Datei, die in einem Amazon S3 S3-Bucket gespeichert ist.

"ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "amzn-s3-demo-bucket", "Key": "csvDataset/ratings.csv", "VersionId": "BcK42coT2jE1234VHLUvBV1yLNod2OEt" } }

Beachten Sie, dass dies im folgenden JSONatabasierten Workflow durch Parameters Argumente ersetzt wird.

"ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Arguments": { "Bucket": "amzn-s3-demo-bucket", "Key": "csvDataset/ratings.csv" "VersionId": "BcK42coT2jE1234VHLUvBV1yLNod2OEt" } }

Inhalt des ItemReader Felds

Je nach Datensatz variiert der Inhalt des ItemReader Felds. Wenn es sich bei Ihrem Datensatz beispielsweise um ein JSON-Array handelt, das aus einem vorherigen Schritt im Workflow übergeben wurde, wird das ItemReader Feld weggelassen. Wenn es sich bei Ihrem Datensatz um eine Amazon S3 S3-Datenquelle handelt, enthält dieses Feld die folgenden Unterfelder.

Resource

Die Amazon S3 S3-API-Integrationsaktion, die Step Functions verwenden wird, z. B. arn:aws:states:::s3:getObject

Arguments (JSONata) or Parameters (JSONPath)

Ein JSON-Objekt, das den Amazon S3 S3-Bucket-Namen und den Objektschlüssel angibt, in dem der Datensatz gespeichert ist.

Wenn für den Bucket die Versionierung aktiviert ist, können Sie auch die Amazon S3 S3-Objektversion angeben.

ReaderConfig

Ein JSON-Objekt, das die folgenden Details spezifiziert:

  • InputType

    Akzeptiert einen der folgenden Werte:CSV,JSON,JSONL,PARQUET,MANIFEST.

    Gibt den Typ der Amazon S3 S3-Datenquelle an, z. B. eine durch Text getrennte Datei (CSV), ein Objekt, eine JSON-Datei, JSON-Zeilen, eine Parquet-Datei, ein Athena-Manifest oder eine Amazon S3 S3-Inventarliste. In Workflow Studio können Sie einen Eingabetyp aus der S3-Elementquelle auswählen.

    Die meisten Eingabetypen, die den S3GetObject Abruf verwenden, unterstützen ExpectedBucketOwner auch VersionId AD-Felder in ihren Parametern. Parquet-Dateien sind die einzige Ausnahme, die nicht unterstützt VersionId wird.

    Eingabedateien unterstützen die folgenden externen Komprimierungstypen: GZIP, ZSTD.

    Beispieldateinamen: myObject.jsonl.gz und. myObject.csv.zstd

    Hinweis: Parquet-Dateien sind binäre Dateien, die intern komprimiert werden. GZIP-, ZSTD- und Snappy-Komprimierung werden unterstützt.

  • Transformation

    Optional. Der Wert ist entweder oder oder. NONE LOAD_AND_FLATTEN

    Falls nicht angegeben, NONE wird davon ausgegangen. Wenn auf gesetztLOAD_AND_FLATTEN, müssen Sie auch einstellenInputType.

    Standardverhalten: Map iteriert über Metadatenobjekte, die von Aufrufen von zurückgegeben wurden. S3:ListObjectsV2 Wenn diese Option auf gesetzt istLOAD_AND_FLATTEN, liest und verarbeitet Map die tatsächlichen Datenobjekte, auf die in der Ergebnisliste verwiesen wird.

  • ManifestType

    Optional. Der Wert ist entweder oder ATHENA_DATA oderS3_INVENTORY.

    Hinweis: Wenn auf gesetztS3_INVENTORY, müssen Sie nicht zusätzlich angeben, InputType da davon ausgegangen wirdCSV, dass der Typ

  • CSVDelimiter

    Sie können dieses Feld angeben, wenn InputType es CSV oder istMANIFEST.

    Akzeptiert einen der folgenden Werte: COMMA (Standard),PIPE,SEMICOLON,SPACE,TAB.

    Anmerkung

    Mit CSVDelimiter diesem Feld ItemReader können Dateien verarbeitet werden, die durch andere Zeichen als ein Komma getrennt sind. Verweise auf „CSV-Dateien“ umfassen auch Dateien, die alternative Trennzeichen verwenden, die im Feld angegeben sind. CSVDelimiter

  • CSVHeaderLocation

    Sie können dieses Feld angeben, wenn InputType es oder istCSV. MANIFEST

    Akzeptiert einen der folgenden Werte, um die Position der Spaltenüberschrift anzugeben:

    • FIRST_ROW— Verwenden Sie diese Option, wenn die erste Zeile der Datei die Kopfzeile ist.

    • GIVEN— Verwenden Sie diese Option, um den Header innerhalb der State-Machine-Definition anzugeben.

      Zum Beispiel, wenn Ihre Datei die folgenden Daten enthält.

      1,307,3.5,1256677221 1,481,3.5,1256677456 1,1091,1.5,1256677471 ...

      Sie könnten das folgende JSON-Array als CSV-Header angeben:

      "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "GIVEN", "CSVHeaders": [ "userId", "movieId", "rating", "timestamp" ] } }
    Größe des CSV-Headers

    Step Functions unterstützt Header von bis zu 10 KiB für textgetrennte Dateien.

  • MaxItems

    Standardmäßig durchläuft der Map Status alle Elemente im angegebenen Datensatz. Durch diese Einstellung MaxItems können Sie die Anzahl der Datenelemente begrenzen, die an den Map Status übergeben werden. Wenn Sie beispielsweise eine durch Text getrennte Datei bereitstellen, die 1.000 Zeilen enthält, und Sie einen Grenzwert von 100 festlegen, übergibt der Interpreter nur 100 Zeilen an den Status Distributed Map. Der Map Status verarbeitet Elemente in sequentieller Reihenfolge, beginnend nach der Kopfzeile.

    Für JSONPathWorkflows können Sie einen Referenzpfad zu einem Schlüssel-Wert-Paar in der Statuseingabe verwendenMaxItemsPath, das in eine Ganzzahl aufgelöst wird. Beachten Sie, dass Sie entweder MaxItems oder angeben könnenMaxItemsPath, aber nicht beide.

    Anmerkung

    Sie können einen Grenzwert von bis zu 100.000.000 angeben, nach dessen Ablauf das Lesen von Elementen Distributed Map beendet wird.

Anforderungen für Konto und Region

Ihre Amazon S3 S3-Buckets müssen sich im selben AWS-Konto und AWS-Region wie Ihr Zustandsmaschine befinden.

Beachten Sie, dass Ihr Zustandsmaschine zwar auf Dateien in Buckets zugreifen kann, die sich in verschiedenen AWS-Konten Buckets befinden AWS-Region, Step Functions jedoch nur das Auflisten von Objekten in Amazon S3 S3-Buckets unterstützt, die sich sowohl in derselben AWS-Region als auch in derselben AWS-Konto Zustandsmaschine befinden.

Verarbeitung verschachtelter Datensätze (aktualisiert am 11. September 2025)

Mit dem neuen Transformation Parameter können Sie einen Wert von angeben LOAD_AND_FLATTEN und die Map liest die tatsächlichen Datenobjekte, auf die in der Ergebnisliste eines Aufrufs von verwiesen wird. S3:ListObjectsV2

Vor dieser Version mussten Sie verschachtelte Distributed Maps erstellen, um die Metadaten abzurufen und dann die eigentlichen Daten zu verarbeiten. In der ersten Map wurden die von zurückgegebenen Metadaten iteriert S3:ListObjectsV2 und untergeordnete Workflows aufgerufen. Eine weitere Map in jedem Child State Machine würde die tatsächlichen Daten aus einzelnen Dateien lesen. Mit der Transformationsoption können Sie beide Schritte gleichzeitig ausführen.

Stellen Sie sich vor, Sie möchten ein tägliches Audit der letzten 24 Protokolldateien durchführen, die Ihr System stündlich erstellt und in Amazon S3 speichert. Ihr Distributed Map-Status kann die Protokolldateien mit S3:ListObjectsV2 auflisten und dann entweder über die Metadaten jedes Objekts iterieren oder er kann jetzt die tatsächlichen Datenobjekte laden und analysieren, die in Ihrem Amazon S3 S3-Bucket gespeichert sind.

Mit dieser LOAD_AND_FLATTEN Option können Sie die Skalierbarkeit erhöhen, die Anzahl der geöffneten Map-Runs reduzieren und mehrere Objekte gleichzeitig verarbeiten. Athena- und Amazon EMR-Jobs generieren in der Regel Ausgaben, die mit der neuen Konfiguration verarbeitet werden können.

Im Folgenden finden Sie ein Beispiel für die Parameter in einer ItemReader Definition:

{ "QueryLanguage": "JSONata", "States": { ... "Map": { ... "ItemReader": { "Resource": "arn:aws:states:::s3:listObjectsV2", "ReaderConfig": { // InputType is required if Transformation is LOAD_AND_FLATTEN. "InputType": "CSV | JSON | JSONL | PARQUET", // Transformation is OPTIONAL and defaults to NONE if not present "Transformation": "NONE | LOAD_AND_FLATTEN" }, "Arguments": { "Bucket": "amzn-s3-demo-bucket1", "Prefix": "{% $states.input.PrefixKey %}" } }, ... } }

Beispiele für Datensätze

Sie können eine der folgenden Optionen als Ihren Datensatz angeben:

Anmerkung

Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Ein Distributed-Map-Status kann eine JSON-Eingabe akzeptieren, die aus einem vorherigen Schritt im Workflow übergeben wurde.

Die Eingabe kann ein JSON-Array, ein JSON-Objekt oder ein Array innerhalb eines Knotens eines JSON-Objekts sein.

Step Functions iteriert direkt über die Elemente eines Arrays oder die Schlüssel-Wert-Paare eines JSON-Objekts.

Um einen bestimmten Knoten auszuwählen, der ein Array aus einem JSON-Objekt enthält, können Sie den ItemsPath ( JSONPath Nur Karte) oder einen JSONata Ausdruck im Items Feld für Bundesstaaten verwenden. JSONata

Um einzelne Elemente zu verarbeiten, startet der Status Distributed Map für jedes Element eine untergeordnete Workflow-Ausführung. Die folgenden Registerkarten zeigen Beispiele für die an den Map Status übergebenen Eingaben und die entsprechenden Eingaben für die Ausführung eines untergeordneten Workflows.

Anmerkung

Das ItemReader Feld wird nicht benötigt, wenn es sich bei Ihrem Datensatz um JSON-Daten aus einem vorherigen Schritt handelt.

Input passed to the Map state

Betrachten Sie das folgende JSON-Array mit drei Elementen.

"facts": [ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" }, { "verdict": "mostly-true", "statement_date": "5/18/2016", "statement_source": "news" } ]
Input passed to a child workflow execution

Mit dem Status Distributed Map werden drei untergeordnete Workflow-Ausführungen gestartet. Jede Ausführung erhält ein Array-Element als Eingabe. Das folgende Beispiel zeigt die Eingabe, die von einer untergeordneten Workflow-Ausführung empfangen wurde.

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }

Ein Distributed Map-Status kann über die Objekte iterieren, die in einem Amazon S3 S3-Bucket gespeichert sind. Wenn die Workflow-Ausführung den Map Status erreicht, ruft Step Functions die ListObjectsV2-API-Aktion auf, die ein Array der Amazon S3 S3-Objektmetadaten zurückgibt. In diesem Array enthält jedes Element Daten, wie z. B. ETagund Key, für die tatsächlichen Daten, die im Bucket gespeichert sind.

Um einzelne Elemente im Array zu verarbeiten, startet der Status Distributed Map die Ausführung eines untergeordneten Workflows. Nehmen wir zum Beispiel an, dass Ihr Amazon S3 S3-Bucket 100 Bilder enthält. Dann enthält das nach dem Aufrufen der ListObjectsV2 API-Aktion zurückgegebene Array 100 Metadatenelemente. Im Status Distributed Map werden dann 100 untergeordnete Workflow-Ausführungen gestartet, um jedes Element zu verarbeiten.

Um Datenobjekte direkt und ohne verschachtelte Workflows zu verarbeiten, können Sie die Transformationsoption LOAD_AND_FLATTEN wählen, um Elemente direkt zu verarbeiten.

Anmerkung
  • Step Functions enthält auch ein Element für jeden Ordner, der mit der Amazon S3 S3-Konsole im Amazon S3 S3-Bucket erstellt wurde. Die Ordnerelemente führen dazu, dass zusätzliche untergeordnete Workflow-Ausführungen gestartet werden.

    Um zu vermeiden, dass für jeden Ordner zusätzliche untergeordnete Workflow-Ausführungen erstellt werden, empfehlen wir, die AWS CLI zum Erstellen von Ordnern zu verwenden. Weitere Informationen finden Sie unter Amazon S3 S3-Befehle auf hoher Ebene im AWS Command Line Interface Benutzerhandbuch.

  • Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Die folgenden Registerkarten zeigen Beispiele für die ItemReader Feldsyntax und die Eingabe, die an die Ausführung eines untergeordneten Workflows für diesen Datensatz übergeben wurde.

ItemReader syntax

In diesem Beispiel haben Sie Ihre Daten, zu denen Bilder, JSON-Dateien und Objekte gehören, in einem Präfix organisiert, das processData in einem Amazon S3 S3-Bucket mit dem Namen benannt istamzn-s3-demo-bucket.

"ItemReader": { "Resource": "arn:aws:states:::s3:listObjectsV2", "Parameters": { "Bucket": "amzn-s3-demo-bucket", "Prefix": "processData" } }
Input passed to a child workflow execution

Der Status Distributed Map startet so viele untergeordnete Workflow-Ausführungen wie die Anzahl der Metadatenelemente, die im Amazon S3 S3-Bucket vorhanden sind. Das folgende Beispiel zeigt die Eingabe, die bei der Ausführung eines untergeordneten Workflows empfangen wurde.

{ "Etag": "\"05704fbdccb224cb01c59005bebbad28\"", "Key": "processData/images/n02085620_1073.jpg", "LastModified": 1668699881, "Size": 34910, "StorageClass": "STANDARD" }

Dank der verbesserten Unterstützung für S3 ListObjects V2 als Eingabequelle in Distributed Map können Ihre Zustandsmaschinen mehrere Datenobjekte direkt aus Amazon S3 S3-Buckets lesen und verarbeiten, sodass keine verschachtelten Maps zur Verarbeitung der Metadaten erforderlich sind!

Mit dieser LOAD_AND_FLATTEN Option macht Ihr State Machine Folgendes:

  • Lesen Sie den tatsächlichen Inhalt jedes Objekts, das per Amazon S3 ListObjectsV2 S3-Aufruf aufgelistet wurde.

  • Analysieren Sie den Inhalt anhand von InputType (CSV, JSON, JSONL, Parquet).

  • Erstellen Sie Elemente aus dem Dateiinhalt (Zeilen/Datensätze) und nicht aus Metadaten.

Mit der Transformationsoption benötigen Sie keine verschachtelten verteilten Maps mehr, um die Metadaten zu verarbeiten. Die Verwendung der Option LOAD_AND_FLATTEN erhöht die Skalierbarkeit, reduziert die Anzahl der aktiven Kartenläufe und verarbeitet mehrere Objekte gleichzeitig.

Die folgende Konfiguration zeigt die Einstellung für: ItemReader

"ItemReader": { "Resource": "arn:aws:states:::s3:listObjectsV2", "ReaderConfig": { "InputType": "JSON", "Transformation": "LOAD_AND_FLATTEN" }, "Arguments": { "Bucket": "S3_BUCKET_NAME", "Prefix": "S3_BUCKET_PREFIX" } }
Empfehlung für das Bucket-Präfix

Wir empfehlen, Ihrem Präfix einen abschließenden Schrägstrich hinzuzufügen. Wenn Sie beispielsweise Daten mit dem Präfix von auswählenfolder1, verarbeitet Ihre Zustandsmaschine sowohl als auchfolder1/myData.csv. folder10/myData.csv Bei folder1/ der Verwendung wird ausschließlich ein Ordner verarbeitet.

Ein Distributed Map-Status kann eine JSON-Datei, die in einem Amazon S3 S3-Bucket gespeichert ist, als Datensatz akzeptieren. Die JSON-Datei muss ein Array oder ein JSON-Objekt enthalten.

Wenn die Workflow-Ausführung den Map Status erreicht, ruft Step Functions die GetObjectAPI-Aktion auf, um die angegebene JSON-Datei abzurufen.

Wenn die JSON-Datei eine verschachtelte Objektstruktur enthält, können Sie den spezifischen Knoten mit Ihrem Datensatz mit einem auswählen. ItemsPointer Die folgende Konfiguration würde beispielsweise eine verschachtelte Liste von ausgewählten Produkten im Inventar extrahieren.

"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "JSON", "ItemsPointer": "/inventory/products/featured" }, "Arguments": { "Bucket": "amzn-s3-demo-bucket", "Key": "nested-data-file.json" } }

Der Map Status wiederholt dann jedes Element im Array und startet für jedes Element eine untergeordnete Workflow-Ausführung. Wenn Ihre JSON-Datei beispielsweise 1000 Array-Elemente enthält, startet der Map Status 1000 untergeordnete Workflow-Ausführungen.

Anmerkung
  • Die Ausführungseingabe, die zum Starten einer untergeordneten Workflow-Ausführung verwendet wird, darf 256 KiB nicht überschreiten. Step Functions unterstützt jedoch das Lesen eines Elements mit einer Größe von bis zu 8 MB aus einer durch Text getrennten Datei, JSON- oder JSON-Zeilendatei, wenn Sie anschließend das optionale ItemSelector Feld anwenden, um die Größe des Elements zu reduzieren.

  • Step Functions unterstützt 10 GB als maximale Größe einer einzelnen Datei in Amazon S3.

  • Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Die folgenden Registerkarten zeigen Beispiele für die ItemReader Feldsyntax und die Eingabe, die an die Ausführung eines untergeordneten Workflows für diesen Datensatz übergeben wurde.

Stellen Sie sich für dieses Beispiel vor, Sie haben eine JSON-Datei mit dem Namenfactcheck.json. Sie haben diese Datei in einem Präfix gespeichert, das jsonDataset in einem Amazon S3 S3-Bucket benannt ist. Das Folgende ist ein Beispiel für den JSON-Datensatz.

[ { "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }, { "verdict": "false", "statement_date": "6/7/2022", "statement_source": "television" }, { "verdict": "mostly-true", "statement_date": "5/18/2016", "statement_source": "news" }, ... ]
ItemReader syntax
"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "JSON" }, "Parameters": { "Bucket": "amzn-s3-demo-bucket", "Key": "jsonDataset/factcheck.json" } }
Input to a child workflow execution

Mit dem Status Distributed Map werden so viele untergeordnete Workflow-Ausführungen gestartet, wie die Anzahl der in der JSON-Datei vorhandenen Array-Elemente entspricht. Das folgende Beispiel zeigt die Eingabe, die von einer untergeordneten Workflow-Ausführung empfangen wurde.

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }

Ein Distributed Map-Status kann eine JSON Lines-Datei, die in einem Amazon S3 S3-Bucket gespeichert ist, als Datensatz akzeptieren.

Anmerkung
  • Die Ausführungseingabe, die zum Starten einer untergeordneten Workflow-Ausführung verwendet wird, darf 256 KiB nicht überschreiten. Step Functions unterstützt jedoch das Lesen eines Elements mit einer Größe von bis zu 8 MB aus einer durch Text getrennten Datei, JSON- oder JSON-Zeilendatei, wenn Sie anschließend das optionale ItemSelector Feld anwenden, um die Größe des Elements zu reduzieren.

  • Step Functions unterstützt 10 GB als maximale Größe einer einzelnen Datei in Amazon S3.

  • Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Die folgenden Registerkarten zeigen Beispiele für die ItemReader Feldsyntax und die Eingabe, die an die Ausführung eines untergeordneten Workflows für diesen Datensatz übergeben wurde.

Stellen Sie sich für dieses Beispiel vor, Sie haben eine JSON Lines-Datei mit dem Namenfactcheck.jsonl. Sie haben diese Datei in einem Präfix gespeichert, das jsonlDataset in einem Amazon S3 S3-Bucket benannt ist. Das Folgende ist ein Beispiel für den Inhalt der Datei.

{"verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech"} {"verdict": "false", "statement_date": "6/7/2022", "statement_source": "television"} {"verdict": "mostly-true", "statement_date": "5/18/2016", "statement_source": "news"}
ItemReader syntax
"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "JSONL" }, "Parameters": { "Bucket": "amzn-s3-demo-bucket", "Key": "jsonlDataset/factcheck.jsonl" } }
Input to a child workflow execution

Mit dem Status Distributed Map werden so viele untergeordnete Workflow-Ausführungen gestartet, wie die Anzahl der Zeilen in der JSONL-Datei vorhanden ist. Das folgende Beispiel zeigt die Eingabe, die von einer untergeordneten Workflow-Ausführung empfangen wurde.

{ "verdict": "true", "statement_date": "6/11/2008", "statement_source": "speech" }
Anmerkung

Mit CSVDelimiter diesem Feld ItemReader können Dateien verarbeitet werden, die durch andere Zeichen als ein Komma getrennt sind. Verweise auf „CSV-Dateien“ umfassen auch Dateien, die alternative Trennzeichen verwenden, die im Feld angegeben sind. CSVDelimiter

Ein Distributed Map-Status kann eine durch Text getrennte Datei, die in einem Amazon S3 S3-Bucket gespeichert ist, als Datensatz akzeptieren. Wenn Sie eine durch Text getrennte Datei als Datensatz verwenden, müssen Sie eine Spaltenüberschrift angeben. Hinweise zum Angeben einer Kopfzeile finden Sie unter. Inhalt des ItemReader Felds

Step Functions analysiert textgetrennte Dateien auf der Grundlage der folgenden Regeln:

  • Das Trennzeichen, das Felder voneinander trennt, wird durch in angegeben. CSVDelimiter ReaderConfig Das Trennzeichen ist standardmäßig auf. COMMA

  • Zeilenumbrüche sind ein Trennzeichen, das Datensätze voneinander trennt.

  • Felder werden als Zeichenketten behandelt. Verwenden Sie für Datentypkonvertierungen die States.StringToJson systeminterne Funktion in. ItemSelector (Karte)

  • Doppelte Anführungszeichen (“ „) sind nicht erforderlich, um Zeichenketten einzuschließen. Zeichenfolgen, die in doppelte Anführungszeichen eingeschlossen sind, können jedoch Kommas und Zeilenumbrüche enthalten, ohne als Datensatztrennzeichen zu dienen.

  • Sie können doppelte Anführungszeichen beibehalten, indem Sie sie wiederholen.

  • Backslashes (\) sind eine weitere Möglichkeit, Sonderzeichen zu maskieren. Backslashes funktionieren nur mit anderen Backslashes, doppelten Anführungszeichen und dem konfigurierten Feldtrennzeichen wie Komma oder Pipe. Ein umgekehrter Schrägstrich, gefolgt von einem beliebigen anderen Zeichen, wird stillschweigend entfernt.

  • Sie können umgekehrte Schrägstriche beibehalten, indem Sie sie wiederholen. Beispiel:

    path,size C:\\Program Files\\MyApp.exe,6534512
  • Backslashes, die doppelte Anführungszeichen (\") umgehen, funktionieren nur, wenn sie paarweise eingefügt werden. Wir empfehlen daher, doppelte Anführungszeichen zu maskieren, indem Sie sie wiederholen:. ""

  • Wenn die Anzahl der Felder in einer Zeile geringer ist als die Anzahl der Felder in der Kopfzeile, stellt Step Functions leere Zeichenketten für die fehlenden Werte bereit.

  • Wenn die Anzahl der Felder in einer Zeile größer ist als die Anzahl der Felder in der Kopfzeile, überspringt Step Functions die zusätzlichen Felder.

Weitere Informationen darüber, wie Step Functions eine durch Text getrennte Datei analysiert, finden Sie unter. Example of parsing an input CSV file

Wenn die Workflow-Ausführung den Map Status erreicht, ruft Step Functions die GetObjectAPI-Aktion auf, um die angegebene Datei abzurufen. Der Map Status iteriert dann über jede Zeile in der Datei und startet eine untergeordnete Workflow-Ausführung, um die Elemente in jeder Zeile zu verarbeiten. Nehmen wir beispielsweise an, Sie stellen eine durch Text getrennte Datei bereit, die 100 Zeilen als Eingabe enthält. Dann übergibt der Interpreter jede Zeile an den Status. Map Der Map Status verarbeitet Elemente in serieller Reihenfolge, beginnend nach der Kopfzeile.

Anmerkung
  • Die Ausführungseingabe, die zum Starten einer untergeordneten Workflow-Ausführung verwendet wird, darf 256 KiB nicht überschreiten. Step Functions unterstützt jedoch das Lesen eines Elements mit einer Größe von bis zu 8 MB aus einer durch Text getrennten Datei, JSON- oder JSON-Zeilendatei, wenn Sie anschließend das optionale ItemSelector Feld anwenden, um die Größe des Elements zu reduzieren.

  • Step Functions unterstützt 10 GB als maximale Größe einer einzelnen Datei in Amazon S3.

  • Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Die folgenden Registerkarten zeigen Beispiele für die ItemReader Feldsyntax und die Eingabe, die an die Ausführung eines untergeordneten Workflows für diesen Datensatz übergeben wurde.

ItemReader syntax

Angenommen, Sie haben eine CSV-Datei mit dem Namenratings.csv. Anschließend haben Sie diese Datei in einem Präfix gespeichert, das csvDataset in einem Amazon S3 S3-Bucket benannt ist.

"ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW", "CSVDelimiter": "PIPE" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "amzn-s3-demo-bucket", "Key": "csvDataset/ratings.csv" } }
Input to a child workflow execution

Mit dem Status Distributed Map werden so viele untergeordnete Workflow-Ausführungen gestartet, wie die Anzahl der Zeilen in der CSV-Datei vorhanden ist, mit Ausnahme der Kopfzeile, falls in der Datei. Das folgende Beispiel zeigt die Eingabe, die von einer untergeordneten Workflow-Ausführung empfangen wurde.

{ "rating": "3.5", "movieId": "307", "userId": "1", "timestamp": "1256677221" }

Parquet-Dateien können als Eingabequelle verwendet werden. Apache Parquet-Dateien, die in Amazon S3 gespeichert sind, ermöglichen eine effiziente, skalierbare, spaltenweise Datenverarbeitung.

Bei der Verwendung von Parquet-Dateien gelten die folgenden Bedingungen:

  • 256 MB ist die maximale Zeilengruppengröße und 5 MB ist die maximale Fußzeilengröße. Wenn Sie Eingabedateien angeben, die eine der Grenzwerte überschreiten, gibt Ihr State Machine einen Laufzeitfehler zurück.

  • Das VersionId Feld wird nicht unterstützt fürInputType=Parquet.

  • Interne GZIP-, ZSTD- und Snappy-Datenkomprimierung werden nativ unterstützt. Es sind keine Dateinamenerweiterungen erforderlich.

Im Folgenden finden Sie ein Beispiel für eine ASL-Konfiguration für die InputType Einstellung „Parquet“:

"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "PARQUET" }, "Arguments": { "Bucket": "amzn-s3-demo-bucket", "Key": "my-parquet-data-file-1.parquet" } }
Verarbeitung von Aufträgen in großem Umfang

Für extrem umfangreiche Jobs verwendet Step Functions viele Eingabeleser. Die Leser verschachteln ihre Bearbeitung, was dazu führen kann, dass einige Leser eine Pause einlegen, während andere weiterarbeiten. Intermittierender Fortschritt ist erwartetes Verhalten in großem Maßstab.

Sie können die aus den UNLOAD Abfrageergebnissen generierten Athena-Manifestdateien verwenden, um die Quelle der Datendateien für Ihren Kartenstatus anzugeben. Sie legen fest ManifestType InputType auf ATHENA_DATA und entweder CSVJSONL, oderParquet.

Beim Ausführen einer UNLOAD Abfrage generiert Athena zusätzlich zu den eigentlichen Datenobjekten eine Datenmanifestdatei. Die Manifestdatei enthält eine strukturierte CSV-Liste der Datendateien. Sowohl das Manifest als auch die Datendateien werden an Ihrem Speicherort für Athena-Abfrageergebnisse in Amazon S3 gespeichert.

UNLOAD (<YOUR_SELECT_QUERY>) TO 'S3_URI_FOR_STORING_DATA_OBJECT' WITH (format = 'JSON')

Konzeptioneller Überblick über den Prozess, kurz gefasst:

  1. Wählen Sie Ihre Daten mithilfe einer UNLOAD Abfrage in Athena aus einer Tabelle aus.

  2. Athena generiert eine Manifestdatei (CSV) und die Datenobjekte in Amazon S3.

  3. Konfigurieren Sie Step Functions, um die Manifestdatei zu lesen und die Eingabe zu verarbeiten.

Die Funktion kann die Ausgabeformate CSV, JSONL und Parquet von Athena verarbeiten. Alle Objekte, auf die in einer einzigen Manifestdatei verwiesen wird, müssen dasselbe Format haben. InputType Beachten Sie, dass durch eine UNLOAD Abfrage exportierte CSV-Objekte keinen Header in der ersten Zeile enthalten. Prüfen SieCSVHeaderLocation, ob Sie Spaltenüberschriften angeben müssen.

Der Kartenkontext wird auch eine enthalten, $states.context.Map.Item.Source sodass Sie die Verarbeitung an die Datenquelle anpassen können.

Im Folgenden finden Sie eine Beispielkonfiguration eines für die Verwendung eines Athena-Manifests ItemReader konfigurierten:

"ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "ManifestType": "ATHENA_DATA", "InputType": "CSV | JSONL | PARQUET" }, "Arguments": { "Bucket": "<S3_BUCKET_NAME>", "Key": "<S3_KEY_PREFIX><QUERY_ID>-manifest.csv" } }
Verwenden des Athena-Manifestmusters in Workflow Studio

Ein gängiges Szenario für die Datenverarbeitung wendet eine Map auf Daten an, die aus einer Athena UNLOAD-Abfrage stammen. Die Map ruft eine Lambda-Funktion auf, um jedes im Athena-Manifest beschriebene Element zu verarbeiten. Step Functions Workflow Studio bietet ein vorgefertigtes Muster, das all diese Komponenten zu einem Block kombiniert, den Sie auf Ihre State Machine-Leinwand ziehen können.

Ein Distributed Map-Status kann eine Amazon S3 S3-Inventarmanifestdatei, die in einem Amazon S3 S3-Bucket gespeichert ist, als Datensatz akzeptieren.

Wenn die Workflow-Ausführung den Map Status erreicht, ruft Step Functions die GetObjectAPI-Aktion auf, um die angegebene Amazon S3 S3-Inventarmanifestdatei abzurufen.

Standardmäßig iteriert der Map Status dann über die Objekte im Inventar, um ein Array von Amazon S3 S3-Inventarobjekt-Metadaten zurückzugeben.

Wenn Sie S3_INVENTORY angeben, kann ManifestType es InputType nicht angegeben werden.

Anmerkung
  • Step Functions unterstützt 10 GB als maximale Größe einer einzelnen Datei in einem Amazon S3 S3-Inventarbericht nach der Dekomprimierung. Step Functions kann jedoch mehr als 10 GB verarbeiten, wenn jede einzelne Datei weniger als 10 GB groß ist.

  • Step Functions benötigt die entsprechenden Berechtigungen für den Zugriff auf die Amazon S3 S3-Datensätze, die Sie verwenden. Informationen zu den IAM-Richtlinien für die Datensätze finden Sie unter. IAM-Richtlinienempfehlungen für Datensätze

Im Folgenden finden Sie ein Beispiel für eine Inventardatei im CSV-Format. Diese Datei enthält die Objekte mit den Namen csvDataset undimageDataset, die in einem benannten Amazon S3 S3-Bucket gespeichert sindamzn-s3-demo-source-bucket.

"amzn-s3-demo-source-bucket","csvDataset/","0","2022-11-16T00:27:19.000Z" "amzn-s3-demo-source-bucket","csvDataset/titles.csv","3399671","2022-11-16T00:29:32.000Z" "amzn-s3-demo-source-bucket","imageDataset/","0","2022-11-15T20:00:44.000Z" "amzn-s3-demo-source-bucket","imageDataset/n02085620_10074.jpg","27034","2022-11-15T20:02:16.000Z" ...
Wichtig

Step Functions unterstützt keinen benutzerdefinierten Amazon S3 S3-Inventarbericht als Datensatz.

Das Ausgabeformat Ihres Amazon S3 S3-Inventarberichts muss CSV sein.

Weitere Informationen zu Amazon S3 S3-Inventaren und deren Einrichtung finden Sie unter Amazon S3 S3-Inventar.

Das folgende Beispiel für eine Amazon S3 S3-Inventarmanifestdatei zeigt die CSV-Header für die Metadaten des Inventarobjekts.

{ "sourceBucket" : "amzn-s3-demo-source-bucket", "destinationBucket" : "arn:aws:s3:::amzn-s3-demo-inventory", "version" : "2016-11-30", "creationTimestamp" : "1668560400000", "fileFormat" : "CSV", "fileSchema" : "Bucket, Key, Size, LastModifiedDate", "files" : [ { "key" : "amzn-s3-demo-bucket/destination-prefix/data/20e55de8-9c21-45d4-99b9-46c732000228.csv.gz", "size" : 7300, "MD5checksum" : "a7ff4a1d4164c3cd55851055ec8f6b20" } ] }

Die folgenden Registerkarten zeigen Beispiele für die ItemReader Feldsyntax und die Eingabe, die an die Ausführung eines untergeordneten Workflows für diesen Datensatz übergeben wurde.

ItemReader syntax
"ItemReader": { "ReaderConfig": { "InputType": "MANIFEST" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "amzn-s3-demo-destination-bucket", "Key": "destination-prefix/amzn-s3-demo-bucket/config-id/YYYY-MM-DDTHH-MMZ/manifest.json" } }
Input to a child workflow execution
{ "LastModifiedDate": "2022-11-16T00:29:32.000Z", "Bucket": "amzn-s3-demo-source-bucket", "Size": "3399671", "Key": "csvDataset/titles.csv" }

Abhängig von den Feldern, die Sie bei der Konfiguration des Amazon S3-Inventarberichts ausgewählt haben, kann der Inhalt Ihrer manifest.json Datei vom Beispiel abweichen.

IAM-Richtlinienempfehlungen für Datensätze

Wenn Sie Workflows mit der Step Functions-Konsole erstellen, kann Step Functions automatisch IAM-Richtlinien auf der Grundlage der Ressourcen in Ihrer Workflow-Definition generieren. Generierte Richtlinien beinhalten die geringsten Rechte, die erforderlich sind, damit die State-Machine-Rolle die StartExecution API-Aktion für den Distributed Map-Status aufrufen und auf AWS Ressourcen wie Amazon S3 S3-Buckets und -Objekte sowie Lambda-Funktionen zugreifen kann.

Wir empfehlen, nur die erforderlichen Berechtigungen in Ihre IAM-Richtlinien aufzunehmen. Wenn Ihr Workflow beispielsweise einen Map Status im Modus „Verteilt“ umfasst, beschränken Sie Ihre Richtlinien auf den spezifischen Amazon S3 S3-Bucket und -Ordner, der Ihre Daten enthält.

Wichtig

Wenn Sie einen Amazon S3 S3-Bucket und ein Objekt oder ein Präfix mit einem Referenzpfad zu einem vorhandenen Schlüssel-Wert-Paar in Ihrer Distributed Map-Statuseingabe angeben, stellen Sie sicher, dass Sie die IAM-Richtlinien für Ihren Workflow aktualisieren. Beschränken Sie die Richtlinien auf die Bucket- und Objektnamen, zu denen der Pfad zur Laufzeit aufgelöst wird.

Die folgenden Beispiele zeigen Techniken zur Gewährung der geringsten Rechte, die für den Zugriff auf Ihre Amazon S3 S3-Datensätze mithilfe der ListObjectsV2 - und GetObjectAPI-Aktionen erforderlich sind.

Beispiel Bedingung, die ein Amazon S3 S3-Objekt als Datensatz verwendet

Die folgende Bedingung gewährt die geringsten Rechte für den Zugriff auf Objekte in einem processImages Ordner eines Amazon S3 S3-Buckets.

"Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ], "Condition": { "StringLike": { "s3:prefix": [ "processImages" ] } }
Beispiel eine CSV-Datei als Datensatz verwenden

Das folgende Beispiel zeigt die Aktionen, die für den Zugriff auf eine CSV-Datei mit dem Namen erforderlich sindratings.csv.

"Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/csvDataset/ratings.csv" ]
Beispiel Verwenden eines Amazon S3 S3-Inventars als Datensatz

Im Folgenden werden Beispielressourcen für ein Amazon S3 S3-Inventarmanifest und Datendateien gezeigt.

"Resource": [ "arn:aws:s3:::myPrefix/amzn-s3-demo-bucket/myConfig-id/YYYY-MM-DDTHH-MMZ/manifest.json", "arn:aws:s3:::myPrefix/amzn-s3-demo-bucket/myConfig-id/data/*" ]
Beispiel Verwenden von ListObjects V2 zur Beschränkung auf ein Ordnerpräfix

Bei Verwendung von ListObjectsV2 werden zwei Richtlinien generiert. Eine ist erforderlich, um das Auflisten des Inhalts des Buckets (ListBucket) zu ermöglichen, und eine andere Richtlinie ermöglicht das Abrufen von Objekten im Bucket (GetObject).

Im Folgenden werden Beispielaktionen, Ressourcen und eine Bedingung gezeigt:

"Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ], "Condition": { "StringLike": { "s3:prefix": [ "/path/to/your/json/" ] } }
"Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/path/to/your/json/*" ]

Beachten Sie, dass GetObject kein Gültigkeitsbereich angegeben wird und Sie einen Platzhalter (*) für das Objekt verwenden.