我需要从hdfs位置创建一个外部配置单元表,其中文件中的一列具有保留名称(结尾)。
运行脚本时出现错误: “无法识别列规范中'end''STRUCT''<'附近的输入”
我找到2个解决方案。
第一个是设置hive.support.sql11.reserved.keywords = false,但是此选项已被删除。 https://issues.apache.org/jira/browse/HIVE-14872
第二种解决方案是使用带引号的标识符(column
)。
但是在这种情况下,我得到了错误: “ org.apache.hadoop.hive.serde2.SerDeException:org.codehaus.jackson.JsonParseException:意外字符('c'(代码99)):期望逗号分隔OBJECT条目”
这是我用于创建表的代码:
CREATE TEMPORARY EXTERNAL TABLE ${tmp_db}.${tmp_table}
(
id STRING,
email STRUCT<string:STRING>,
start STRUCT<long:BIGINT>,
end STRUCT<long:BIGINT>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '${input_dir}';
无法重命名该列。
有人知道这个问题的解决方案吗?也许有什么想法? 提前非常感谢!
答案 0 :(得分:0)
您可以尝试以下吗?
hive> set hive.support.quoted.identifiers=column;
hive> create temporary table sp_char ( `#` int, `end` string);
好 耗时:0.123秒
OK
Time taken: 0.362 seconds
hive>
设置蜂巢属性hive.support.quoted.identifiers=column
时,反引号内的所有值均视为文字。
上述属性的其他值是 none ,如果将其设置为none,则可以使用正则表达式来评估列或表达式的值。
希望这会有所帮助