本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Step Functions 如何剖析輸入CSV檔案
管理狀態和轉換資料
Step Functions 最近新增了變數,並JSONata管理狀態和轉換資料。
了解如何使用變數傳遞資料,以及使用 轉換資料JSONata。
Step Functions 根據下列規則剖析CSV檔案:
-
逗號 (,) 是分隔欄位的分隔符號。
-
Newlines 是分隔記錄的分隔符號。
-
欄位視為字串。對於資料類型轉換,請使用 中的
States.StringToJson
內部 函數ItemSelector (地圖)。 -
不需要雙引號 (" ") 來括住字串。不過,以雙引號括住的字串可包含逗號和新行,而不做為記錄分隔符號。
-
您可以重複雙引號來保留雙引號。
-
如果資料列中的欄位數目小於標頭中的欄位數目,Step Functions 會提供缺少值的空白字串。
-
如果資料列中的欄位數目超過標頭中的欄位數目,Step Functions 會略過其他欄位。
範例 剖析輸入CSV檔案
假設您已提供名為 CSV的檔案
,其中包含一列做為輸入。然後,您已將此檔案存放在名為 的 Amazon S3 儲存貯體中myCSVInput.csv
。CSV 檔案如下所示。amzn-s3-demo-bucket
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
]
}
]