使用 AWS Glue 中的 CSV 数据
本页介绍了如何使用 AWS Glue 从在每列数据值前后加引号的 CSV 文件或包含标题值的 CSV 文件创建架构。
处理引号中包含的 CSV 数据
假设 CSV 文件的数据字段用双引号括起来,如下例所示。
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
要在 Athena 中对使用具有引号值的 CSV 文件创建的表运行查询,必须修改 AWS Glue 中的表属性以使用 OpenCSVSerDe。有关 OpenCSV SerDe 的更多信息,请参阅 用于处理 CSV 的 Open CSV SerDe。
要在 AWS Glue 控制台中编辑表属性
-
在 AWS Glue 控制台中,选择导航窗格中的 Tables(表)。
-
选择您要编辑的表的链接,然后依次选择 Action(操作)、Edit table(编辑表)。
-
在 Edit table(编辑表)页面上,进行以下更改:
-
对于 Serialization lib(序列化库),输入
org.apache.hadoop.hive.serde2.OpenCSVSerde
。 -
对于 Serde parameters(SerDe 参数),为键
escapeChar
、quoteChar
和separatorChar
输入以下值:-
对于
escapeChar
,输入一个反斜杠 (\
)。 -
对于
quoteChar
,输入一个双引号 ("
)。 -
对于
separatorChar
,输入一个逗号 (,
)。
-
-
-
选择保存。
有关更多信息,请参阅《AWS Glue 开发人员指南》中的查看和编辑表详细信息。
也可以通过编程方式更新 AWS Glue 表属性。使用 AWS Glue UpdateTable API 操作或 update-table AWS CLI 命令来修改表定义中的 SerDeInfo
块,如以下示例 JSON 所示。
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
"parameters": {
"separatorChar": ","
"quoteChar": "\""
"escapeChar": "\\"
}
},
处理具有标题的 CSV 文件
当您在 Athena 中使用 CREATE TABLE
语句定义一个表时,可以使用 skip.header.line.count
表属性以忽略 CSV 数据中的标题,如下例所示。
... STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/
csvdata_folder
/'; TBLPROPERTIES ("skip.header.line.count"="1")
或者,您可以事先删除 CSV 标题,以便不将标题信息包含在 Athena 查询结果中。实现此操作的一种方法是使用 AWS Glue 任务,它执行提取、转换和加载 (ETL) 工作。您可以使用 PySpark Python 方言的扩展语言在 AWS Glue 中编写脚本。有关更多信息,请参阅《AWS Glue 开发人员指南》中的在 AWS Glue 中编写任务。
以下示例显示 AWS Glue 脚本中的一个函数,它使用 from_options
写出动态帧,并将 writeHeader
格式选项设置为 false,从而删除标题信息:
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")