hive是否允许列名称为“行”?

时间:2018-03-10 03:13:29

标签: json hadoop hive hive-serde

我知道每个hive版本都有一些保留关键字,不能用作列名。

但问题是我的数据来自json,我的列名是根据json值。

我无法修改数据。 还有其他选择吗?

这里是一行样本数据和表格。

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18

2 个答案:

答案 0 :(得分:2)

ROWS is a reserved word

你总是可以逃避保留字

`rows`:ARRAY 

另外add a different SerDe that allows field renaming

答案 1 :(得分:1)

有一个JIRA,已在Hive 0.13.0版本中修复。 根据发布

  

引用标识符的默认行为已更改。现在在   语言级别中指定的任何列名称   back-ticks(`)按字面意思处理。这与标准sql一致   引用标识符的行为。在反向标记字符串中使用double   背叛逃脱。

启用带引号的标识符

hive.support.quoted.identifiers文件中将column配置参数设置为hive-site.xml,以在SQL列名中启用带引号的标识符。对于Hive 0.13,有效值为nonecolumn

set hive.support.quoted.identifiers = column 

e.g。

在以下示例中,x+ya?b是新表的有效列名。

CREATE TABLE test (`x+y` String, `a?b` String);