2017-08-04 68 views
2

我運行在蜂巢一個簡單的查詢將產生以下輸出(有一些其他的附加列從JSON字符串選擇的值。如何提取蜂巢

|------|-----------------------------------------------------------| 
| col1 | col2              | 
|------|-----------------------------------------------------------| 
| A | {"variable1":123,"variable2":456,"variable3":789}   |           
|------|-----------------------------------------------------------| 
| B | {"variable1":222,"variable2":333,"variable3":444}   | 
-------------------------------------------------------------------- 

我需要能夠解析JSON字符串,並在SELECT語句本身的過程中爲每個標記提取值,以便我可以合併WHERE語句以僅返回對我有用的字符串部分。

因此,我的最終輸出可能如下所示:

|------------------------------------------| 
| col1 |variable1 | variable2 | variable3 |          
|------------------------------------------| 
| A | 123 | 456 | 789  |          
|------------------------------------------| 
| B | 222 | 333 | 444  | 
-------------------------------------------- 

我已經在包括分裂,使用GET_JSON_OBJECT在esnaples指定的參數結構使用各種功能嘗試又都返回錯誤,如:

No matching method for class org.apache.hadoop.hive.ql.udf.UDFJson 
with (struct<...>, string). Possible choices: _FUNC_(string, string) 

可能有人請告訴我們,如果我試圖做是可行的,或解釋我要去哪裏錯了?

在此先感謝

回答

2
select col1, get_json_object(col2,'$.variable1') as variable1, 
get_json_object(col2,'$.variable2') as variable2, 
get_json_object(col2,'$.variable3') as variable3 
from json_test 

如果你把你的輸出爲表(比如json_test),你可以用這種方式解析。您也可以調整您的查詢以獲取這些結果。

輸出:

col1 |variable1 |variable2 |variable3 | 
-----|----------|----------|----------| 
A |123  |456  |789  | 
B |222  |333  |444  |