hive 如何处理json字符串

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

我们经常在线上会碰见一些json字符串需要在hive中处理,我在工作中碰见的就是常见的两种,一种是json字符串,一种是json数组,我们来讨论下这两种情况如何取到你想要的数据。

一:hive处理json字符串

假设我们有个json字符串如下:

info={"name":"Alice","age":32,"class":"Three"}

如果我们需要取到其中的age的字段,那么我们就需要使用hive中自带的函数get_json_object(column,‘$.key’),所以我们可以用如下的语句取到age字段:

select get_json_object(info,'$.age')

二:hive处理json数组类的字符串

上述json字符串可以轻松获取到对应的字段,那么如果我们碰到一个json数组呢,如下所示:

column=[{"name":"Alice","age":32,"class":"Three"},{"name":"Cherry","age":26,"class":"Two"},{"name":"Bob","age":24,"class":"one"}]

hive中并没有直接处理这个json数组的函数,如果我们想要把这个数组中的所有字段拿出来,每个json字符串中key拿出来组成一行数据,我们的思路是不是如下:
2.1:要完成列转行的操作,我们是不是要用到explode函数,
2.2: explode 函数要跟上一个数组,那我们是不是考虑把这个字符串分割成一个数组?
2.3: 可能大家会有疑问,这个column不就是一个数组嘛?错了,这是一个长成数组的字符串而已
2.4:所以我们要把这个字符串切分成一个数组,用到hive的split函数,我们想要完美切分的话就必须先把中括号去掉,然后如果根据逗号切分显然不太现实,我们必须把 ”},{“ 替换成“};{” ,这个“;”或者切分符号自己可以定义,我们替换就要用到replace函数了。所以详细的步骤如下

select  replace(column,'\\[\\]','')

之后再把逗号替换调

select  replace(column,'\\}\\,\\{','\\}\\;\\{')

再接着我们就可以进行一个切分了,然后使用explode展开了

select  explode(split(replace(column,'\\}\\,\\{','\\}\\;\\{'),';'))

展开之后的结果我们得到的就是如下

{"name":"Alice","age":32,"class":"Three"}
{"name":"Cherry","age":26,"class":"Two"}
{"name":"Bob","age":24,"class":"one"}

这个时候我们是不是可以考虑使用刚刚上文说到的那个get_json_object 函数把每个字段拿出来,但是因为explode函数不能放在别的函数里面,所以我们做个子查询取出,最终代码如下:

select get_json_object(student_info,'$.name') as name,
get_json_object(student_info,'$.age') as age,
get_json_object(student_info,'$.class') as class fromselect  explode(split(replace( replace(column,'\\[\\]',''),'\\}\\,\\{','\\}\\;\\{'),';')) as student_info from some_table) t 

以上便是关于hive中的json字符的处理方式了,如有不对,欢迎大家批评改正文章来源地址https://www.toymoban.com/news/detail-734642.html

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

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

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

相关文章

  • mysql 解析json字符串、数组字符串、json数组字符串

    笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不太喜欢用这种手段,因为他们比较低效。于是我想这里总结一下

    2024年02月16日
    浏览(56)
  • 整理mongodb文档:集合名字有类似-等特殊字符串如何处理?

    整理mongodb文档:集合名字有类似-等特殊字符串如何处理? 首先,先创建一个collection的名字为’collection-test’,这个表名中,colletion的名字有一个特殊字符串“-”,但是后面插入数据的时候会有这么一个错误返回 很多情况下,我们的表名会有类似-或则是/等这些特殊字符串,

    2024年02月14日
    浏览(44)
  • 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学习(11)hive去除空格或去掉字符串前后或中间的某一字符串

    问题: 需求:需要去除字符串中前N位/后N位指定字符 例如:11ABC11 MySQL中可使用以下函数解决: Hive中可使用以下函数解决: 其他函数亦可利用正则表达式规则自行变换替代。

    2024年02月12日
    浏览(42)
  • Java中如何将字符串转换为JSON格式字符串

    Java中如何将字符串转换为JSON格式字符串 在Java编程中,我们经常需要处理JSON数据格式。有时候,我们需要将一个普通的字符串转换为JSON格式的字符串。幸运的是,Java提供了多种方法来实现这个目标。在本文中,我将介绍两种常见的方法来将字符串转换为JSON格式字符串。 方

    2024年02月06日
    浏览(58)
  • json 格式字符串

    一、潜规则: 按照字符串内存储的内容对字符串进行了一系列的划分 = 普通字符串: \\\'jhsagdvhjkasgvfdhj\\\' = 数字字符串: \\\'798798654651323265987\\\' = html 格式字符串: \\\'div/div\\\' = 查询字符串: \\\'key=valuekey2=value2\\\'          json对象:描述数据的一种格式,将若干繁杂的属性封装为一个整体      

    2024年02月02日
    浏览(42)
  • JSON字符串转换

    大家好 , 我是苏麟  , 今天带来一个JSON序列化库 Gson .  GitHub 地址 : GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back java 中 json 序列化库有很多: gson (谷歌的) fastjson (阿里的) jackson kryo cheshire json-simple ......  根据 maven repository 中使用情况

    2024年02月12日
    浏览(44)
  • Hive字符串函数讲解

    Hive 提供了许多内建的字符串函数来处理文本数据。以下是您提到的字符串函数的详细讲解,包括案例和使用注意事项: LENGTH() 功能 :返回字符串的长度。 语法 : LENGTH(string) 案例 : SELECT LENGTH(\\\'Hello World\\\');  结果为  11 注意事项 :如果输入是 NULL,则返回结果也是 NULL。 U

    2024年01月21日
    浏览(45)
  • json字符串的处理

    java处理json格式字符串,首先转成 JSONArray 或 JSONObject 类型(如果有实际对象类的话,也可以直接转成对象) 就相当于 JSONArray 和 JSONObject 可以相互嵌套, JSON对象的用法和java中 List Map 用法是一样的! 1-可以通过JSONArray循环获取每一项的值 有get 和 add 方法 取值 赋值 2-JSONObj

    2024年02月19日
    浏览(48)
  • Hive字符串转日期细节

    日期函数:to_date();date_format(); from_unixtime ( unix_timestamp ()) 测试数据:t1 t2 2020/4/1 13:01 2020-04-01 目的:将t1转成 2020-04-01 t2 - 2020/04/01 方法(针对t1进行处理) from_unixtime ( unix_timestamp ( substr (t1,1, length (register_time) - 5) ,\\\'yyyy/MM/dd\\\'),\\\'yyyy-MM-dd\\\') - 2020-04-01 方法(针对t2进行处理) date_format

    2024年02月06日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包