hive解析json

这篇具有很好参考价值的文章主要介绍了hive解析json。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、背景

二、hive 解析 json 数据函数

1、get_json_object 

2、json_tuple

3、使用嵌套子查询(explode+regexp_replace+split+json_tuple)解析json数组

4、使用 lateral view 解析json数组

5、解析非固定名称json


一、背景

我们进行ETL(Extract-Transfer-Load)  过程中,经常会遇到从不同数据源获取的不同格式的数据,其中某些字段就是json格式,里面拼接了很多字段key和指标值value,今天讲一下如何解析出来相关数据。

二、hive 解析 json 数据函数

1、get_json_object 

  • 语法:get_json_object(json_string, '$.key')
  • 说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。这个函数每次只能返回一个数据项。
  • 优势:一次可以解析一个json字段
select 
    get_json_object('{"user_name":"chimchim","age":30}', '$.user_name') as user_name,
    get_json_object('{"user_name":"chimchim","age":30}', '$.age')       as age

hive json解析函数,hive,hadoop,数据仓库

2、json_tuple

  • 语法: json_tuple(json_string, k1, k2 ...)
  • 说明:解析json的字符串json_string,可指定多个json数据中的key,返回对应的value。如果输入的json字符串无效,那么返回NULL。
  • 优势:一次可以解析多个json字段
select json_tuple('{"user_name":"chimchim","age":30,"sex":"woman"}', 'user_name', 'age','sex') 

hive json解析函数,hive,hadoop,数据仓库

3、使用嵌套子查询(explode+regexp_replace+split+json_tuple)解析json数组

select json_tuple(json, 'user_name', 'age', 'sex')
from (
select explode( --将json数组中的元素解析出来,转化为每行显示
split(regexp_replace(regexp_replace(
'[{"user_name":"chimchim","age":30,"sex":"woman"},{"user_name":"zonzon","age":2,"sex":"man"}]' --要解析的json内容
, '\\[|\\]', '')           --将json数组两边的中括号去掉
,'\\}\\,\\{', '\\}\\;\\{') --将json数组元素之间的逗号换成分号
, '\\;'))                  --以分号作为分隔符(split函数以分号作为分隔)
as json) o;

hive json解析函数,hive,hadoop,数据仓库

explode函数

  • 语法:explode(Array OR Map)
  • 说明:explode()函数接收一个array或者map类型的数据作为输入,然后将array或map里面的元素按照每行的形式输出,即将hive一列中复杂的array或者map结构拆分成多行显示,也被称为列转行函数。
select array('A','B','C') ;

 hive json解析函数,hive,hadoop,数据仓库

regexp_replace函数

  • 语法: regexp_replace(string A, string B, string C)
  • 说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
--将,替换为;
select regexp_replace('{"user_name":"chimchim","age":30,"sex":"woman"}', ',', ';');

 hive json解析函数,hive,hadoop,数据仓库

4、使用 lateral view 解析json数组

lateral view

说明:lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

原始数据

select 'chimchim' as user_name,array("a","b","c") as class;

hive json解析函数,hive,hadoop,数据仓库

解析后

select user_name,class_str
from  (select 'chimchim' as user_name,array("a","b","c") as class)  a
lateral view explode(class) tmp_table as class_str;

hive json解析函数,hive,hadoop,数据仓库

使用 lateral view 解析json数组

--第一种写法
select 
     get_json_object(tmp,'$.user_name') as user_name
    ,get_json_object(tmp,'$.age')       as age
    ,get_json_object(tmp,'$.sex')       as sex
from (select '[{"user_name":"chimchim","age":30,"sex":"woman"},{"user_name":"zonzon","age":2,"sex":"man"}]'  as json_str) a
lateral view explode(split(regexp_replace(regexp_replace(json_str , '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) tmp as tmp;

hive json解析函数,hive,hadoop,数据仓库

--第二种写法
select user_name,age,sex
from (
    select '[{"user_name":"chimchim","age":30,"sex":"woman"},{"user_name":"zonzon","age":2,"sex":"man"}]' as json
) t 
lateral view explode(split(regexp_replace(regexp_replace(regexp_replace(json, '\\[|\\]',''),'\\s',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) tmp1 as regexp_json 
lateral view json_tuple(regexp_json,'user_name','age','sex') tmp2 as user_name,age,sex
;

hive json解析函数,hive,hadoop,数据仓库

5、解析非固定名称json

select 
     json
    ,regrep_json
    ,split(regrep_json,':')[0] as key1
    ,split(regrep_json,':')[1] as value1
from (
    select '{"a":0.1,"b":0.2,"c":0.3,"d":0.4,"e":0.5,"f":0.6,"g":0.7}' as json
) t
lateral view explode(split(regexp_replace(regexp_replace(json, '\\{|\\}|\\"',''),'\\s',''),'\\,')) tmp1 as regrep_json 
;

hive json解析函数,hive,hadoop,数据仓库

 文章来源地址https://www.toymoban.com/news/detail-698866.html

到了这里,关于hive解析json的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive 解析 JSON 字符串数据的实现方式

    在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path) ,该方法参数解析如下: json_txt :顾名思义,就是 JSON 字符串; path :指的是匹配 JSON 字符串的格式,通过固定的语法获取 JSON 字符串中的内容。 常用的 path 参数匹配符号有四个,分别是: $ :表示获

    2024年02月05日
    浏览(48)
  • Hive解析JSON串

    Hive 处理 json 数据总体来说有两个方向的路走: 将 json 以字符串的方式整个入 Hive 表,然后通过使用 UDF 函数解析已经导入到 hive 中的数据,比如使用 LATERAL VIEW json_tuple 的方法,获取所需要的列名。 在导入之前将 json 拆成各个字段,导入 Hive 表的数据是已经解析过的。这将需

    2024年02月16日
    浏览(34)
  • hive解析json

    目录 一、背景 二、hive 解析 json 数据函数 1、get_json_object  2、json_tuple 3、使用嵌套子查询(explode+regexp_replace+split+json_tuple)解析json数组 4、使用 lateral view 解析json数组 5、解析非固定名称json 我们进行ETL(Extract-Transfer-Load)  过程中,经常会遇到从不同数据源获取的不同格式的数据,

    2024年02月09日
    浏览(38)
  • Hive解析嵌套JSON数组

    同时发生的埋点数据往往会在一个json字符串里发送,形式是[json,json,json]的埋点数组,需要把这些数据拉平 把最外层的\\\"[“和”]\\\"去除 把\\\"},{“转换为”}|||{\\\" ,使用split函数根据\\\"|||\\\"把string转为array,LATERAL view explode()把array转为列 第二步的时候发现,内部的json数组也有\\\"},

    2024年02月12日
    浏览(52)
  • 7. Hive解析JSON字符串、JSON数组

    Hive解析JSON字符串 1. get_json_object 语法: get_json_object(json_string, path) json_string 是要解析的JSON字符串 path 是用于指定要提取的字段路径的字符串 局限性 get_json_object 函数的性能会受到 JSON数据的结构和大小 的影响。对于较复杂的嵌套结构,考虑使用Hive的其他函数或自定义函数来

    2024年02月11日
    浏览(54)
  • Hive解析Json数组超全讲解

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析。接下来就聊聊Hive中是如何解析json数据的。 #1. get_json_object 语法: get_json_object(json_string, \\\'$.key\\\') 说明:

    2024年02月06日
    浏览(44)
  • hive中get_json_object函数

    原数据,表名:explode_test,列名:sale_info。  [{\\\"source\\\":\\\"7fresh\\\",\\\"monthSales\\\":4900,\\\"userCount\\\":1900,\\\"score\\\":\\\"9.9\\\"},{\\\"source\\\":\\\"jdmart\\\",\\\"monthSales\\\":7900,\\\"userCount\\\":2900,\\\"score\\\":\\\"5.9\\\"},{\\\"source\\\":\\\"yam\\\",\\\"monthSales\\\":54900,\\\"userCount\\\":12900,\\\"score\\\":\\\"4.9\\\"}] [{\\\"source\\\":\\\"7fresh\\\",\\\"monthSales\\\":4900,\\\"userCount\\\":1900,\\\"score\\\":\\\"9.9\\\"},{\\\"source\\\":\\\"jdmart\\\",\\\"

    2023年04月09日
    浏览(72)
  • Hive数据仓库---Hive的安装与配置

    Hive 官网地址:https://hive.apache.org/ 下载地址:http://www.apache.org/dyn/closer.cgi/hive/ 把安装文件apache-hive-3.1.2-bin.tar.gz上传到master节点的/opt/software目 录下,执行以下命令把安装文件解压到/opt/app目录中 进入/opt/app目录,为目录apache-hive-3.1.2-bin建立软件链接 即输入hive就相当于输入a

    2024年02月02日
    浏览(40)
  • hive数据仓库工具

    1、hive是一套操作数据仓库的应用工具,通过这个工具可实现mapreduce的功能 2、hive的语言是hql[hive query language] 3、官网hive.apache.org 下载hive软件包地址  Welcome! - The Apache Software Foundation https://archive.apache.org/ 4、hive在管理数据时分为元数据和真数据,其中元数据要保存在数据库中

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包