get_json_object函数使用方法

  使用配置
内容纲要

概要描述

inceptor 中针对json 格式数据对象,希望获取指定位置的对象时使用的函数,提供了两种用法:

  • get_json_object() :从指定地址获取json对象。
  • json_tuple():用 json 中的元组生成表,返回值的tuple。这是 ‘get_json_object’ 的高效版。

使用说明

get_json_object:从指定位置获取json对象。get_json_object(string json_string, string path)
此函数需要传递两个参数:
第一个参数填写json对象变量,
第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;
每次只能返回一个数据项,如果输入的json字符串无效,那么返回NULL。

json_tuple():用 json 中的元组生成表,返回值的tuple。这是 ‘get_json_object’ 的高效版。
参数和 get_json_object 参数类似,string path 可以为多个。

数据文件

datat.txt

{"时间点":"20160402"},{"id":"1"},{"name":"tianna"}

将数据文件上传到hdfs

hdfs dfs -mkdir /inceptor1/data1/datat
hdfs dfs -put datat.txt /inceptor1/data1/datat

建表

CREATE EXTERNAL TABLE jsontest( 
 timestamp string DEFAULT NULL, 
 id string DEFAULT NULL, 
 name string DEFAULT NULL
 ) 
 ROW FORMAT SERDE 
 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
 WITH SERDEPROPERTIES ( 
 'field.delim'=','
) 
 STORED AS INPUTFORMAT 
 'org.apache.hadoop.mapred.TextInputFormat'
 OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
 LOCATION 
 'hdfs:/inceptor1/data1/datat'
 TBLPROPERTIES ( 
 'transient_lastDdlTime'='1529027504');

使用函数查询id字段

select get_json_object(jsontest.id,'$.id') from jsontest;
说明:
第一个参数jsontest.id,json对象;
第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;

输出结果

file

字段值(value)支持中文

file

json_tuple 函数

函数的作用:用来解析json字符串中的多个字段

set character.literal.as.string=true;  
--向该函数传递的字符串要求必须是STRING类型,为防止系统将传递的字符串参数识别为CHAR型,必须要打开开关character.literal.as.string,强制将字符串识别为STRING类型
SELECT json_tuple('{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}', 'firstName',
'email') FROM system.dual;

注:两个函数都不支持 key 值为中文,但是都支持 value 为中文

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。