Step Functions 如何剖析輸入CSV檔案 - AWS Step Functions

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

Step Functions 如何剖析輸入CSV檔案

管理狀態和轉換資料

Step Functions 最近新增了變數,並JSONata管理狀態和轉換資料。

了解如何使用變數傳遞資料,以及使用 轉換資料JSONata

Step Functions 根據下列規則剖析CSV檔案:

  • 逗號 (,) 是分隔欄位的分隔符號。

  • Newlines 是分隔記錄的分隔符號。

  • 欄位視為字串。對於資料類型轉換,請使用 中的States.StringToJson內部 函數ItemSelector (地圖)

  • 不需要雙引號 (" ") 來括住字串。不過,以雙引號括住的字串可包含逗號和新行,而不做為記錄分隔符號。

  • 您可以重複雙引號來保留雙引號。

  • 如果資料列中的欄位數目小於標頭中的欄位數目,Step Functions 會提供缺少值的空白字串

  • 如果資料列中的欄位數目超過標頭中的欄位數目,Step Functions 會略過其他欄位。

範例
剖析輸入CSV檔案

假設您已提供名為 CSV的檔案myCSVInput.csv,其中包含一列做為輸入。然後,您已將此檔案存放在名為 的 Amazon S3 儲存貯體中amzn-s3-demo-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": "amzn-s3-demo-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 ] } ]