Hive Create Table错误

时间:2015-02-06 18:54:05

标签: hadoop hive

我正在尝试使用具有以下结构的JSONSerde创建Hive表:

CREATE TABLE events (
device_uuid string,
uuid string,
custom struct<
    "Vendor ID":int,
    "Customer ID":int>,
platform string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE;

我尝试创建表时遇到的问题如下:

Error occurred executing hive query: OK converting to local hdfs://dpcl01:820/user/hive/aux_jars/json-serde-1.3-jar-with-dependencies.jar Added /tmp/523576-5d62-4fff-b737-813aca807eee_resources/json-serde-1.3-jar-with-dependencies.jar to class path Added resource: /tmp/52356576-5d62-4fff-b737-813aca807eee_resources/json-serde-1.3-jar-with-dependencies.jar FAILED: ParseException line 8:2 cannot recognize input near '"Vendor ID"' ':' 'int' in column specification

很明显,这个错误是由列名中的空格引起的,但原始数据是以这种形式出现的,我不想执行预处理步骤来删除空格。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果您不想维持预处理阶段(我假设在临时表中加载原始文本然后将其转换为上下文中的预处理),那么最简单的选择对我来说,扩展SerDe以在反序列化期间将空格替换为下划线,以匹配您的Hive列/结构域名称定义。从我所看到的源代码(我假设您正在使用this SerDe),可以覆盖put对象类的JSONObject方法,以便所有空白实例在key参数中,在插入基础地图对象之前进行转换。

如果您 愿意使用登台表来接受该方法,您可以随时加载原始文本并使用get_json_object来提取您需要的内容,因为空格非常好Hive的JSON路径。例如:

get_json_object(raw_text, "$.Vendor ID")