2013-05-01 95 views
3

我試圖從一個JSON文件,它看起來像這樣創建外部表:如何在Hive shell/JDBC語句中轉義特殊字符?

{"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/'; 

但隨後蜂巢外殼不停地抱怨:

無法識別附近「伊蒂埃斯「STRING」輸入「)」列類型

我假設它是導致問題的美元符號「$」。現在我已經嘗試使用倒退(`)和倒退,正斜槓來逃避它,但沒有運氣。我想知道是否有辦法在不更改原始數據的情況下解決此問題?

回答

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/'; 

這裏蜂房列名myentity映射到JSON屬性my$entity
參考:Hive-JSON-Serde readme

+0

oops不能相信我錯過了自述文件中的映射功能。但是在你的答案中有一個錯字,它應該是:'create external table json3(id STRING, myentities STRING) ROW FORMAT SERDE'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES(「mapping.myentities」=「 「我的$實體」) LOCATION'/ my/path/to/dir /'; 「對嗎?我通過映射功能解決了我的問題。 – Liam 2013-05-02 16:57:33

+0

是的,感謝您修復它,這是一個複製粘貼錯字 – 2013-05-03 08:30:59