如何在Hive shell / JDBC语句中转义特殊字符?

时间:2013-05-01 16:27:18

标签: sql character hive dollar-sign

我正在尝试从JSON文件创建一个外部表,如下所示:

{"id": "0010001", "my$entities": [{"a": "foo", "b": "bar"}]}

这是HDFS上的文件,我无法控制它。

我正在使用rcongiu's JSON serde并写下我的声明:

create external table json3(  id STRING,
my$entities STRING ) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/my/path/to/dir/';

然后蜂巢壳一直在抱怨:

  

无法识别列类型

中'ities''STRING'')附近的输入

我认为导致问题的是美元符号“$”。现在我已经尝试使用反引号(`)和向后,正向斜线来逃避但没有运气。我想知道是否有办法在不改变原始数据的情况下解决这个问题?

1 个答案:

答案 0 :(得分:2)

您不能在Hive列名称中使用$符号,但可以将my$entities映射到任何其他有效名称。 E.g:

create external table json3(  id STRING,
myentities STRING ) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( "mapping.myentities" = "my$entities" )  
LOCATION '/my/path/to/dir/';

此处,Hive列名myentity已映射到JSON属性my$entity 参考:Hive-JSON-Serde readme