我在Hive中运行一个简单的查询,产生以下输出(还有一些其他的列。
|------|-----------------------------------------------------------|
| col1 | col2 |
|------|-----------------------------------------------------------|
| A | {"variable1":123,"variable2":456,"variable3":789} |
|------|-----------------------------------------------------------|
| B | {"variable1":222,"variable2":333,"variable3":444} |
--------------------------------------------------------------------
我需要能够解析json字符串并在SELECT语句本身期间拉出每个标记的值,这样我就可以合并一个WHERE语句来只返回对我有价值的字符串部分。 / p>
所以我的最终输出可能如下所示:
|------------------------------------------|
| col1 |variable1 | variable2 | variable3 |
|------------------------------------------|
| A | 123 | 456 | 789 |
|------------------------------------------|
| B | 222 | 333 | 444 |
--------------------------------------------
我尝试使用各种函数来包含SPLIT和GET_JSON_OBJECT,使用esnap中指定的参数结构,但所有返回错误如下:
No matching method for class org.apache.hadoop.hive.ql.udf.UDFJson
with (struct<...>, string). Possible choices: _FUNC_(string, string)
有人可以告诉我,我想做的事情是否可行,或解释我哪里出错?
提前致谢
答案 0 :(得分:7)
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 |
答案 1 :(得分:0)
第一步:
create table in HIVE
create table json_student(student string)
-----load data in this table
hive>select * from json_variable;`enter code here`
{"col1":"A","variable1":123,"variable2":456,"variable3":789}
{"col1":"B","variable1":222,"variable2":333,"variable3":444}
第二步:
create table json_variable1(col1 string,variable1 int,variable2 int,variable3 int);
Step3:
insert overwrite table json_variable1
select get_json_object(variable,'$.col1'),get_json_object(variable,'$.variable1'),get_json_object(variable,'$.variable2'),get_json_object(variable,'$.variable3') from json_variable;
hive> Select * from json_variable1;
A 123 456 789` `
B 222 333 444`
`