剖析輸入 CSV 檔案 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

剖析輸入 CSV 檔案

因為沒有標準化的格式來建立和維護 CSV 檔案中的資料,因此「Step Functions 數」會根據下列規則剖析 CSV 檔案:

  • 逗號 (,) 是用來分隔個別欄位的分隔符號。

  • 換行符是分隔各個記錄的分隔符。

  • 欄位會被視為字串。若要進行資料類型轉換,請使用States.StringToJson內在函數ItemSelector

  • 包含字串時,不需要雙引號 (」「)。但是,以雙引號括住的字串可以包含逗號和換行符,而不會用作分隔符號。

  • 通過重複它們來逃避雙引號。

  • 如果資料列中的欄位數目小於標頭中的欄位數目,Step Functions 會為遺漏值提供空字串。

  • 如果列中的欄位數目大於標題中的欄位數目,則「Step Functions 數」會略過其他欄位。

範例
的剖析輸入 CSV 檔案

假設您提供了一個名為的 CSV 文件myCSVInput.csv包含一行作為輸入。然後,您已將此檔案儲存在 Amazon S3 儲存貯體中my-bucket。CSV 檔案如下所示。

abc,123,"This string contains commas, a double quotation marks (""), and a newline ( )",{""MyKey"":""MyValue""},"[1,2,3]"

以下狀態機讀取此 CSV 文件並使用ItemSelector轉換某些欄位的資料類型。

{ "StartAt": "Map", "States": { "Map": { "Type": "Map", "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "STANDARD" }, "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "End": true } } }, "End": true, "Label": "Map", "MaxConcurrency": 1000, "ItemReader": { "Resource": "arn:aws:states:::s3:getObject", "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "GIVEN", "CSVHeaders": [ "MyLetters", "MyNumbers", "MyString", "MyObject", "MyArray" ] }, "Parameters": { "Bucket": "my-bucket", "Key": "myCSVInput.csv" } }, "ItemSelector": { "MyLetters.$": "$$.Map.Item.Value.MyLetters", "MyNumbers.$": "States.StringToJson($$.Map.Item.Value.MyNumbers)", "MyString.$": "$$.Map.Item.Value.MyString", "MyObject.$": "States.StringToJson($$.Map.Item.Value.MyObject)", "MyArray.$": "States.StringToJson($$.Map.Item.Value.MyArray)" } } } }

當你運行這個狀態機,它產生以下輸出。

[ { "MyNumbers": 123, "MyObject": { "MyKey": "MyValue" }, "MyString": "This string contains commas, a double quote (\"), and a newline (\n)", "MyLetters": "abc", "MyArray": [ 1, 2, 3 ] } ]