解析输入 CSV 文件 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

解析输入 CSV 文件

由于在 CSV 文件中没有创建和维护数据的标准化格式,因此 Step Functions 会根据以下规则解析 CSV 文件:

  • 逗号 (,) 是用于分隔单个字段的分隔符。

  • 换行符是分隔单个记录的分隔符。

  • 字段被视为字符串。对于数据类型转换,使用 ItemSelector 中的 States.StringToJson 内置函数。

  • 不需要双引号 (" ") 将字符串括起来。但是,用双引号括起来的字符串可以包含逗号和换行符,但不能用作分隔符。

  • 通过重复双引号来转义双引号。

  • 如果一行中的字段数少于标题中的字段数,Step Functions 会为缺失的值提供空字符串。

  • 如果一行中的字段数大于标题中的字段数,Step Functions 会跳过多余的字段。

例 解析输入 CSV 文件

假设您提供了一个名为 myCSVInput.csv 的 CSV 文件,其中包含一行作为输入。然后,您已将此文件存储在名为 my-bucket 的 Amazon S3 存储桶中。该 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 ] } ]