hive for循环_生产Hive优雅处理嵌套JSON

一、背景

最近有个需求,需要解析数仓中某张表的某个字段,该字段为JSON,且为嵌套的多层JSON,JSON数据格式化之后如下:

e1df18ece0230f4122980ba1c9b80ce9.png

由于是生产环境上的数据,因此对于某些value以xxx进行替代,并不影响sql的编写样例:

623fc6c127ca4946886994b02b62f241.png

需求是需要提取出每个这种JSON中所有的brandName。

二、解决方案

2.1 思路1:

使用hive自带的get_json_object函数进行处理

2a121f9c5b027a5e28fe3a1e8e5ed91d.png

尝试之后,发现最终的效果只能是取出其中一个brandname,并不能取出全部。

2.2 思路2:

既然使用自带的json处理函数不能满足,那么就自己去开发一个udf函数,思路比较简单,只要将读入的每个json进行解析,一个for循环,将里面的brandName依次拿出来就行。

2.3 思路3:

其实Hive SQL也可以一行sql直接搞定,没必要写什么udf,思路如下:

1)将json 以brand_name进行切分成多行 使用lateral view和explode进行配合处理

2)对每一行数据进行处理 提取出品牌名

3)剔除为数字的情况

3366504bcfdd13cfa5e1a62269909453.png

这样,对应的一个seller_id就将对应的所有branName给全部取了出来,以一个list的形式拼接在了一起。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: hive get_json_object是Hive中的一个函数,用于从JSON字符串中提取指定的值。该函数需要两个参数:第一个参数是JSON字符串,第二个参数是要提取的值的路径。例如,如果我们有一个JSON字符串{"name":"John","age":30,"city":"New York"},我们可以使用get_json_object函数来提取name的值,语法如下: SELECT get_json_object('{"name":"John","age":30,"city":"New York"}', '$.name'); 输出结果为: John 这个函数在Hive中非常有用,因为Hive支持将JSON数据存储在表中,并且可以使用get_json_object函数来查询和分析这些数据。 ### 回答2: Hive的get_json_object函数是用来从JSON格式的字符串中提取指定的字段值的函数。它的语法如下: get_json_object(json_string, json_path) 其中,json_string是指要进行解析的JSON格式的字符串,json_path是指要提取的字段的路径。返回值是指定字段的值。 get_json_object函数的用途是在Hive中对JSON格式的数据进行处理和分析。通过提供json_string和json_path参数,我们可以很方便地从JSON字符串中提取我们所需的字段的值。 举个例子说明,假设我们有一个JSON格式的字符串: {"name": "张三", "age": 20, "city": "北京"} 我们可以使用get_json_object函数来提取name字段的值,语法如下: SELECT get_json_object('{"name": "张三", "age": 20, "city": "北京"}', '$.name'); 以上语句将返回字符串"张三"作为结果。 除了提取顶层字段的值外,get_json_object函数还支持提取嵌套字段的值。比如,假设我们有如下的JSON字符串: { "person": { "name": "张三", "age": 20, "city": "北京" } } 我们可以使用如下语句来提取嵌套字段name的值: SELECT get_json_object('{ "person": { "name": "张三", "age": 20, "city": "北京" } }', '$.person.name'); 以上语句将返回字符串"张三"作为结果。 总之,Hive的get_json_object函数是用来从JSON格式的字符串中提取指定字段值的一个便捷函数,可以方便地进行JSON数据的处理和分析。 ### 回答3: Hive中的get_json_object函数用于从JSON字符串中提取特定字段的值。它的语法如下: get_json_object(JSON_STRING, JSON_PATH) 其中,JSON_STRING是一个包含JSON数据的字符串,JSON_PATH是指向要提取值的字段的路径。 该函数返回指定字段的值,如果路径无效或字段不存在,则返回null。 例如,假设我们有以下JSON字符串: {"id": 1, "name": "John", "age": 25, "address": {"street": "Main Street", "city": "New York"}} 我们可以使用get_json_object函数来提取特定字段的值。例如: SELECT get_json_object('{"id": 1, "name": "John", "age": 25}', '$.name'); 这将返回字符串值"John"。 如果我们要提取嵌套字段的值,可以使用JSON_PATH来指定路径。例如: SELECT get_json_object('{"id": 1, "name": "John", "address": {"street": "Main Street", "city": "New York"}}', '$.address.city'); 这将返回字符串值"New York"。 需要注意的是,JSON_PATH必须遵循JSONPath规范,以正确指定要提取的字段路径。 总而言之,get_json_object函数在Hive中用于从JSON字符串中提取特定字段的值,可以通过指定JSON_PATH来提取嵌套字段的值,并返回相应的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值