amazon-web-services - Athena 将特殊字符显示为?
问题描述
我有一个低于 DDL 的外部表
CREATE EXTERNAL TABLE `table_1`(
`name` string COMMENT 'from deserializer',
`desc1` string COMMENT 'from deserializer',
`desc2` string COMMENT 'from deserializer',
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'='|',
'skip.header.line.count'='1')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://temp_loc/temp_csv/'
TBLPROPERTIES (
'classification'='csv',
'compressionType'='none',
'typeOfData'='file')
当尝试使用 Athena 呈现输出时,此表读取的 csv 文件是 UTF-16 LE 编码的,特殊字符在输出中显示为问号。有没有办法在 Athena 中设置编码或解决这个问题。
解决方案
正如 Philipp Johannis 在评论中提到的,解决方案是将serialization.encoding
表属性设置为“UTF-16LE”。据我所见 LazySimpleSerde
uses java.nio.charset.Charset.forName
,因此 Java 接受的任何编码/字符集名称都应该有效。