AWS Athena查询部分值带引号的CSV时返回值含多余引号如何解决
解决方案
方案1:修改表SERDE配置(推荐,永久生效)
你当前的建表语句没有为OpenCSVSerde配置引号识别参数,该序列化器本身原生支持混合带引号/不带引号的CSV字段,只需补充SERDE属性即可自动解析去除包裹用的双引号:
CREATE EXTERNAL TABLE `weatherdata_output`( `name` string, `state` string, `lat` double, `lng` double, ...) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "\"", "escapeChar" = "\\" ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://<bucket>/output' TBLPROPERTIES ( 'transient_lastDdlTime'='1630559293')
如果你不想重建表,也可以直接在AWS Glue控制台找到对应表,进入编辑页面,在「序列化库参数」中手动添加上述三个配置项,保存后立即生效。
方案2:查询时临时去除引号
如果不方便修改表结构,可以在查询时用trim函数去除字段首尾的双引号:
SELECT trim('"' FROM name) AS name, trim('"' FROM state) AS state, lat, lng FROM weatherdata_output
注意该方案仅适用于字段内容本身不会以双引号开头/结尾的场景。
补充说明
你之前查阅的相关方案没有限定必须所有字段带引号,OpenCSVSerde配置quoteChar后会自动识别所有被双引号包裹的字段并去除外层引号,不管其他字段是否带引号,完全适配你当前的CSV格式。
内容的提问来源于stack exchange,提问作者Simon Rex
相关产品推荐
相关产品推荐

