sql—如何从配置单元中的json字符串中提取选定值

rbpvctlc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(436)

我正在配置单元中运行一个简单的查询,它生成以下输出(以及其他一些列)。

|------|-----------------------------------------------------------|
| 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     |
--------------------------------------------

我尝试过使用示例中指定的参数结构使用各种函数,包括split和get\u json\u object,但都返回错误,例如:

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

有人能告诉我,如果我试图做的是可行的,或解释一下我哪里做错了?
提前谢谢

xdyibdwo

xdyibdwo1#

第一步:

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);

第三步:

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`

`
icomxhvb

icomxhvb2#

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\u test),您可以用这种方式进行解析。您也可以调整查询以获得这些结果。
输出:

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

相关问题