Hive字符串数组json类型取某字段再列转行

这篇具有很好参考价值的文章主要介绍了Hive字符串数组json类型取某字段再列转行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、原始数据

acct content
1232313 [{"name":"张三","code":"上海浦东新区89492jfkdaj\r\n福建的卡"...},{"name":"狂徒","code":"select * from table where aa=1\r\n and a=12"...},{...}]
... ...

二、需求

 上述数据表名code_content,把json中code内容全都取出来拼接成一行数据,最终效果:

acct new_content
1232313 上海浦东新区89492jfkdaj\r\n福建的卡\u0001select * from table where aa=1\r\n and a=12
... ...

三、解析思路

四、实现方法

1.sql

select acct,concat_ws('\u0001',collect_list(t.code)) code
from 
(
select acct,get_json_object(a_json,'$.code') code
from
(
select acct,
split(regexp_replace(regexp_extract(code,'(^\\[)(.*?)(\\]$)',2),'\\},\\{','\\}|\\{'),'\\|') as t_code
from code_content
where dt=20230823
) a
lateral view explode(t_code) code_content_tab as a_json
) t
group by acct

2.sql解释:

  • regexp_extract(code,'(^\\[)(.*?)(\\]$)',2):用正则取出数组里的json
  • regexp_replace:替换},{为}|{,方便切割因为,号一般语句里会比较多
  • split:切割成数组
  • explode:函数中的参数传入的是arrary数据类型的列名,通常,explode函数会与lateral view一起结合使用
  • lateral view:Lateral View配合 split, explode 等UDTF函数一起使用,它能够将一列数据拆成多行数据,并且对拆分后结果进行聚合,即将多行结果组合成一个支持别名的虚拟表。
  • get_json_object(a_json,'$.code'):获取json字段value
  • concat_ws('\u0001',collect_list(t.code)):“列转行”

参考:

Hive SQL中的 lateral view 与 explode(列转行)以及行转列_sql explode_卖山楂啦prss的博客-CSDN博客

hivesql解析json数组并拆分成多行_hive sql怎么对一个数组进行分行_Time Woods的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-668102.html

到了这里,关于Hive字符串数组json类型取某字段再列转行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • jquery和php json字符串转数组对象 和 数组对象转json字符串

    要实现从对象转换为 JSON 字符串,使用 JSON.stringify( ) 方法: 要实现从 JSON 转换为对象,使用 JSON.parse() 方法: 数组变字符串 字符串变数组 json转数组   json_decode(  string $json ,  bool $assoc = false ,  int $depth = 512 ,  int $options = 0 ) $json:待解码的 json string 格式的字符串。这个函数

    2024年02月13日
    浏览(122)
  • hive 如何处理json字符串

    我们经常在线上会碰见一些json字符串需要在hive中处理,我在工作中碰见的就是常见的两种,一种是json字符串,一种是json数组,我们来讨论下这两种情况如何取到你想要的数据。 假设我们有个json字符串如下: 如果我们需要取到其中的age的字段,那么我们就需要使用hive中自

    2024年02月06日
    浏览(46)
  • Hive 解析 JSON 字符串数据的实现方式

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

    2024年02月05日
    浏览(50)
  • java将json字符串转换成json数组

    有些时候我们需要将json字符串转换成数组,并且只取一些属性值进行下一个方法的赋值,这样就涉及到了json字符串的转换了, json字符串有两种形式,一种是以{A,B,C},一种是[{A},{B},{C}]。但是很多时候是这两种的结合。 首先导入jar包 如果是第一种只需要加入以下代码,注意

    2024年02月11日
    浏览(54)
  • 如何将JSON字符串数组转对象集合

    1、、、引入jar 包 2、Java对象转成JSON格式 3、JSON格式字符串转换成Java对象 3.1、直接将JSON字符串转换成Java对象 3.2、先将JSON字符串转换成JSON对象,再转换成Java对象 3.3、如果JSON字符串是一个JSON数组,并且数组里面存放的同一种类型的对象,可以将这个JSON数组转换成Java的Li

    2024年02月02日
    浏览(62)
  • hivesql 将json格式字符串转为数组

    完整过程SQL在文末 本案例 json 字符串参考格式,请勿使用本数据 本案例测试数据,复制保存后请勿格式化 本案例为数仓分层设计 创建ods层原始数据表 创建dwd层维度数据表 ETL转换ods层数据插入到dwd层 创建ods层原始数据表 加载测试数据 创建dwd层维度数据表 ETL转换ods层数据插

    2024年02月03日
    浏览(51)
  • spark SQL 怎么将一个时间戳字符串转换成hive支持的时间日期类型?

    在 Spark SQL 中,可以使用 to_timestamp 函数将一个时间戳字符串转换成 Hive 支持的时间日期类型。这个函数的语法如下: 其中,timestampStr 表示要转换的时间戳字符串,format 表示时间戳字符串的格式,格式必须与时间戳字符串的实际格式相匹配。如果不指定格式,Spark 会使用默认

    2024年02月11日
    浏览(49)
  • 实体类中嵌套Enum类型并想转换成JSON字符串时遇到的问题。

    先说明问题的产生,在自己写着玩的时候,新建了一个 User 类如下: 不难看出User类中,用到了枚举类把性别规定成了两个。 下面是SexEnum类: 这里,当我想通过工具类将其转换成json字符串并且让枚举中的 值能返回对应的文字时,出现了问题。返回的值是枚举类的 属性名 而

    2024年02月08日
    浏览(39)
  • sql 语句 字段字符串操作

    substring_index() 函数 字符串截取 参考大神博客 replace() 字符串替换 ROUND() 函数 保留多少位小数 参考大神博客 locate() 函数 判断某个字段属性值是否包含某个字符串 concat() 函数 字段属性值连接 case when then else 参考大神博客

    2024年02月13日
    浏览(41)
  • HIVE获取json字段特定值(单个json或者json数组)

    1.获取单个json字符串里的某一特定值 函数:get_json_object(单个json,‘$.要获取的字段’) 示例: 代码:SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’) as name; SELECT get_json_object(‘{“NAME”:“张三”,“ID”:“1”}’,‘$.NAME’); 2. json_tuple 语法:json_tuple(json_string,

    2024年02月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包