【发布时间】:2020-06-15 10:16:55
【问题描述】:
我正在根据 s3 中的数据在 Athena 中创建表。这是查询的简短版本。
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\\ 之类的文本出现异常而不转义,或者任何其他解决方法?
【问题讨论】:
标签: amazon-web-services etl aws-glue amazon-athena hive-serde