您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

Hive 超赞的解析 Json 数组的函数

时间:2022-03-31 11:49:36  来源:  作者:andy.W

背景

大数据的 ETL(Extract-Transfer-Load) 过程的 Transfer 阶段,需要对 json 串数据进行转换“拍平”处理。

亲测!超好用 Hive 内置的 json 解析函数 一文中详细介绍过 get_json_object 和 json_tuple 函数如何对 json 串进行有效解析,但美中不足的是这两个函数都无法解析 json 数组,只能解析单个 json 串。

 

这里将会介绍 Hive 中常用于 json 数组的解析函数及详细使用方法。

json数组解析:需求1

数据准备

例如:Hive中有一张 test_json 表,表中 json_data 字段的内容如下:

Hive 超赞的解析 Json 数组的函数

 

基于以上的 json_data 数据,现需要将以上 json 串数据解析为如下结构数据:

Hive 超赞的解析 Json 数组的函数

 

在进行解析之前,先来了解下面两个函数的使用方法。

函数运用

1. explode函数

语法

explode(Array|Map)

说明

explode()函数接收一个 array 或者 map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。

即将 Hive 一列中复杂的 array 或者 map 结构拆分成多行显示,也被称为列转行函数。

 

举例

array测试sql语句:

select explode(array('user_id','name','age'));

执行结果:

Hive 超赞的解析 Json 数组的函数

 

map测试sql语句:

select explode(map('user_id',1,'name','rocky','age',18));

执行结果:

Hive 超赞的解析 Json 数组的函数

 

2. regexp_replace函数

语法

regexp_replace(str A, str B, str C)

说明

语法含义:将字符串 A 中的符合正则表达式 B 的部分替换为 C。

注意:当字符串 A 中有一些特殊字符时,在正则表达式 B 中要使用转义字符。

 

举例

sql语句:

select regexp_replace('hello world!', '\ |\!', '');

执行结果:

Hive 超赞的解析 Json 数组的函数

 

3. 具体函数运用

了解 explode 函数与 regexp_replace 函数的使用规则后,现在来完成上面数据准备中提出的解析需求。

第一步解析:json数组拆分成多行

sql语句:

SELECT explode(split(
     regexp_replace(
         regexp_replace(
            '[
                {"user_id":"1","name":"小琳","age":16},
                {"user_id":"2","name":"小刘","age":18},
                {"user_id":"3","name":"小明","age":20}
            ]', 
            '\[|\]' , ''), 将json数组两边的中括号去掉
            
              '\}\,\{' , '\}\;\{'), 将json数组元素之间的逗号换成分号
                
                 '\;') 以分号作为分隔符(split函数以分号作为分隔)
          ); 

执行结果:

Hive 超赞的解析 Json 数组的函数

 

第二步解析:json数组key转列字段

sql语句:

select json_tuple(json, 'user_id', 'name', 'age') 
 from (select explode(split(
     regexp_replace(
      regexp_replace(
       '[
        {"user_id":"1","name":"小琳","age":16},
        {"user_id":"2","name":"小刘","age":18},
        {"user_id":"3","name":"小明","age":20}
       ]',
       '\[|\]' , ''), 
        '\}\,\{' , '\}\;\{'), 
          '\;') 
     )as json) tmp;

执行结果:

Hive 超赞的解析 Json 数组的函数

 

json数组解析:需求2

数据准备

例如:

Hive中有一张 data_json 表,表中 goods_id 和 str_data 字段的内容如下:

Hive 超赞的解析 Json 数组的函数

 

基于以上的 goods_id 和 str_data 数据,现需要将以上 json 串数据解析为如下结构数据:

Hive 超赞的解析 Json 数组的函数

 

在进行解析之前,先来了解下面两个函数的使用方法。

函数运用

1. lateral view函数

说明

lateral view 用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

lateral view 首先为原始表的每行调用 UDTF,UDTF 会把一行拆分成一行或者多行,lateral view 在把结果组合,产生一个支持别名表的虚拟表。

 

举例

例如:Hive 中有一张 page_ads 表,表数据结构如下:

Hive 超赞的解析 Json 数组的函数

 

page_name 代表页面名称,ads_id 代表投放广告的所属 id,多个 id之间使用逗号分隔。

 

需求:统计所有广告 id 在所有页面中出现的次数。

第一步解析:拆分广告id

拆分sql语句:

SELECT page_name, ads_id 
    FROM page_ads LATERAL VIEW explode(ads_id) adTable AS adid;

拆分结果:

Hive 超赞的解析 Json 数组的函数

 

第二步解析:聚合统计

聚合统计sql语句:

SELECT adid, count(1) 
    FROM page_ads LATERAL VIEW explode(ads_id) adTable AS adid
GROUP BY adid;

统计结果:

Hive 超赞的解析 Json 数组的函数

 

2. 具体函数运用

解析 data_json 表的sql语句如下:

select goods_id,get_json_object(sale_json,'$.sold') as sold
from data_json 
  LATERAL VIEW explode(split(goods_id,','))goods as goods_id 
  LATERAL VIEW explode(split(
         regexp_replace(
           regexp_replace(json_str , '\[|\]',''),'\}\,\{','\}\;\{'),'\;')) sales as sale_json;

注意:

上述语句是 3*3 笛卡尔积的结果,所以此方式适用于数据量不是很大的情况。

执行结果如下:

Hive 超赞的解析 Json 数组的函数

 



Tags:Hive   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一文搞明白Hive与数据库区别
Hive 采用了类似SQL 的查询语言 HQL (Hive Query Language),因此很容易将 Hive 理解为数据库。其实Hive 是为数据仓库设计的,是数据仓库的客户端,所以要搞清楚Hive与数据库的区...【详细内容】
2023-11-02  Search: Hive  点击:(187)  评论:(0)  加入收藏
MySQL到TiDB:Hive Metastore横向扩展之路
一、背景大数据元数据服务Hive Metastore Service(以下简称HMS),存储着数据仓库中所依赖的所有元数据并提供相应的查询服务,使得计算引擎(Hive、Spark、Presto)能在海量数据中准确...【详细内容】
2023-09-28  Search: Hive  点击:(336)  评论:(0)  加入收藏
十分钟掌握Doris,超越Hive、Elasticsearch和PostgreSQL
以前,数据仓库通常由Apache Hive、MySQL、Elasticsearch和PostgreSQL组成。它们支持数据仓库的数据计算和数据存储层: 数据计算:Apache Hive作为计算引擎。 数据存储:MySQL为Dat...【详细内容】
2023-09-27  Search: Hive  点击:(227)  评论:(0)  加入收藏
你真的能搞明白Hive与数据库区别吗?
Hive 采用了类似SQL 的查询语言 HQL (Hive Query Language),因此很容易将 Hive 理解为数据库。其实Hive 是为数据仓库设计的,是数据仓库的客户端,所以要搞清楚Hive与数据库的区...【详细内容】
2023-06-26  Search: Hive  点击:(195)  评论:(0)  加入收藏
【大数据】Hive Join 的原理与机制
一、概述Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中,JOIN操作用于将两个或多个表中的数据连接在一起,以便...【详细内容】
2023-05-08  Search: Hive  点击:(124)  评论:(0)  加入收藏
Hive DDL 操作与视图讲解
一、概述Hive是建立在Hadoop上的数据仓库工具,它允许用户通过类SQL的语法来查询和管理数据。在Hive中,DDL(数据定义语言)和视图操作是非常常见的。 1)表和视图关系表和视图都是数...【详细内容】
2023-05-06  Search: Hive  点击:(148)  评论:(0)  加入收藏
【大数据】Hive 分区和分桶的区别及示例讲解
一、概述在大数据处理过程中,Hive是一种非常常用的数据仓库工具。Hive分区和分桶是优化Hive性能的两种方式,它们的区别如下:1、分区概述Hive分区是把数据按照某个属性分成不同...【详细内容】
2023-05-04  Search: Hive  点击:(159)  评论:(0)  加入收藏
Hive 和 Spark 分区策略剖析
一、概述随着技术的不断的发展,大数据领域对于海量数据的存储和处理的技术框架越来越多。在离线数据处理生态系统最具代表性的分布式处理引擎当属Hive和Spark,它们在分区策略...【详细内容】
2023-03-30  Search: Hive  点击:(148)  评论:(0)  加入收藏
比Hive快十倍的大数据查询利器,你知道吗?
目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据...【详细内容】
2023-03-07  Search: Hive  点击:(204)  评论:(0)  加入收藏
大多数开发人员都弄错的Hive与MapReduce小文件合并问题
因为设置上面四个参数,看上去规定了map结束,MR结束合并文件,如果文件平均小于smallfiles.avgsize启动一个新的MRj进行文件的二次合并。如果启动mr合并文件,没有问题。0.背景近来...【详细内容】
2023-01-31  Search: Hive  点击:(218)  评论:(0)  加入收藏
▌简易百科推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  靳国梁    Tags:JavaScript   点击:(9)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(7)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践——如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(29)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(29)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(23)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(8)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(7)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(58)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(62)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(79)  评论:(0)  加入收藏
站内最新
站内热门
站内头条