首页 > 解决方案 > 使用 serdeproperties 的配置单元会出错

问题描述

我正在尝试创建 hive 表,以便 hdfs 文件系统具有 UTF-8 格式,问题是查询给出错误,不确定我做错了什么。

DROP TABLE IF EXISTS output_2057565014;
CREATE TABLE temp.output_2057565014
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 'ธ'
COLLECTION ITEMS TERMINATED BY '|'
MAP KEYS TERMINATED BY '$'
with serdeproperties('serialization.encoding'='UTF-8') 
LOCATION '/tmp/test-2057565014' 
AS
SELECT * from temp.abc

标签: hivehiveql

解决方案


“查询给出错误” > 是的,但是什么样的?也许阅读该错误消息会有所帮助。没有它,这只是猜测。
所以,让我们猜测一下。


ROW FORMAT DELIMITED子句隐含地假定分隔符是单个 ASCII-7 字符,或者显式定义(当可打印时)或由它们的八进制代码定义。

因此FIELDS TERMINATED BY 'ธ'无效。

您可以尝试不同的变通方法——在上游文件创建过程中更改分隔符;在加载到 HDFS 之前就地更改分隔符(例如,使用一个好的旧sed命令);尝试使用RegExSerde进行硬编码列映射(参见“行格式和 SerDe”下的语言手册 DLL / CREATE TABLE )...


推荐阅读