首页 > 解决方案 > 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 中设置编码或解决这个问题。

标签: amazon-web-servicesamazon-s3amazon-athena

解决方案


正如 Philipp Johannis 在评论中提到的,解决方案是将serialization.encoding表属性设置为“UTF-16LE”。据我所见 LazySimpleSerdeuses java.nio.charset.Charset.forName,因此 Java 接受的任何编码/字符集名称都应该有效。


推荐阅读