Amazon web services 在分隔符之前使用转义字符创建Athena表
我正在从s3中的数据创建雅典娜表。下面是查询的简短版本Amazon web services 在分隔符之前使用转义字符创建Athena表,amazon-web-services,etl,aws-glue,amazon-athena,hive-serde,Amazon Web Services,Etl,Aws Glue,Amazon Athena,Hive Serde,我正在从s3中的数据创建雅典娜表。下面是查询的简短版本 CREATE EXTERNAL TABLE `tablename`( `licensee_pub` string COMMENT 'from deserializer', `admin_number` string COMMENT 'from deserializer', `account_name` string COMMENT 'from deserializer', `ipi_number` string COM
CREATE EXTERNAL TABLE `tablename`(
`licensee_pub` string COMMENT 'from deserializer',
`admin_number` string COMMENT 'from deserializer',
`account_name` string COMMENT 'from deserializer',
`ipi_number` string COMMENT 'from deserializer',
`title` string COMMENT 'from deserializer',
`name` string COMMENT 'from deserializer',
`play_minutes` string COMMENT 'from deserializer',
`play_seconds` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'separatorChar'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'path/to/s3'
TBLPROPERTIES (
'has_encrypted_data'='false')
S3中的文件是用逗号分隔的,虽然创建的表很好,但文件中很少有行有下面这样的记录行
“a”、“b”、“c”、“d”、“abc///def\\\”、“e”、“21”、“32”
未正确创建“abc///def\\”行的实例,将该行后面的所有数据仅放在一个(标题)字段中,如下所示
abc///def\”,e,21,32
可能是转义,并且未正确识别列
是否有任何方法可以使def\\to not escape之类的文本出现异常,或任何其他解决方法?DDL中的
escapeChar
属性表示转义字符是单个\
(需要转义escapeChar
中的反斜杠,因此两个反斜杠实际上意味着一个)
这意味着当serde遇到“\\\”
时,它将使用第一个反斜杠作为第二个转义符,第三个反斜杠作为“
的转义符。由于结束引号已转义,serde将继续读取,直到下一个(未转义)引号
如果您没有实际的转义引号,您可以将
转义卡尔
更改为其他内容,然后在应用程序中确定\\\
的含义。不幸的是,我的字符串中有实际的转义引号。我需要用\转义其他字符,但字符串末尾的那个字符。我认为您无法解决这个问题。\“
表示转义引号,或者不表示转义引号,您不能表示它仅在某些上下文中表示转义。