直接举栗子说明用法吧:

  下面是来自APP埋点脚本获取的一段JSON字符串:通过平台sqoop推数存放在cx_ods_safe.paczcb_paczdata_cz_policy_detail_info.data字段中

{"applicants":[{"birthday":-247478400000,
"certificateNo":"44082419620228443X",
"certificateType":"01",
"customerType":"1",
"name":"方振亚",
"phone":"13692412999",
"sex":"M"}],
"dutyInfoList":[{"dutyCode":"CV01001",
"dutyName":"机动车损失保险",
"insuredAmount":139356.8,
"seats":-999,
"totalActualPremium":1143.71},
{"dutyCode":"CV05002",
"dutyName":"机动车第三者责任保险",
"insuredAmount":1000000.0,
"seats":-999,
"totalActualPremium":1017.67},
{"dutyCode":"CV09003",
"dutyName":"机动车全车盗抢保险",
"insuredAmount":139356.8,
"seats":-999,
"totalActualPremium":406.08},
{"dutyCode":"CV13004",
"dutyName":"机动车车上人员责任保险(司机)",
"insuredAmount":20000.0,
"seats":-999,
"totalActualPremium":42.49},
{"dutyCode":"CV17005",
"dutyName":"机动车车上人员责任保险(乘客)",
"insuredAmount":10000.0,
"seats":4,
"totalActualPremium":54.63},
{"dutyCode":"CV08000",
"dutyName":"玻璃单独破碎险",
"insuredAmount":0.0,
"seats":0,
"totalActualPremium":164.69},
{"dutyCode":"CV27027",
"dutyName":"不计免赔险(机动车损失保险)",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":171.56},
{"dutyCode":"CV31028",
"dutyName":"不计免赔险(机动车第三者责任保险)",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":152.65},
{"dutyCode":"CV41048",
"dutyName":"不计免赔险(机动车全车盗抢险)",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":81.22},
{"dutyCode":"CV44049",
"dutyName":"不计免赔险(机动车车上人员责任保险(司机))",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":6.37},
{"dutyCode":"CV49063",
"dutyName":"机动车损失保险无法找到第三方特约险",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":28.59},
{"dutyCode":"CV44080",
"dutyName":"不计免赔险(机动车车上人员责任保险(乘客))",
"insuredAmount":0.0,
"seats":-999,
"totalActualPremium":8.19}],

"insurants":[{"address":"广东省雷州市西湖大道79号25栋605房",
"birthday":-247478400000,
"certificateNo":"44082419620228443X",
"certificateType":"01",
"customerType":"1",
"name":"方振亚",
"phone":"13692412999","sex":"M"}],

"targets":[{"autoModelName":"炫威DHW7183RUCRE轿车",
"engineNo":"2044185",
"exhaustCapability":"1.799",
"owner":{"address":"广东省广州市天河区请到附近门店自取",
"birthday":-247478400000,
"certificateNo":"44082419620228443X",
"certificateType":"01",
"customerType":"1",
"name":"方春",
"phone":"18922074876",
"sex":"M"},
"ownershipAttributeCode":"03",
"registerDate":1435680000000,
"usageAttributeCode":"02",
"vehicleFrameNo":"LVHRU5804F6044188",
"vehicleLicenseCode":"粤G-JB877",
"vehicleSeats":"5",
"vehicleTonnages":"0.0"}]};

获取json数据的思路:
-- (1)json_tuple()获取json脚本 里面json节点dutyInfoList
-- (2)1)regexp_extract()去掉中括号[]
  -- 2)regexp_extract()用双竖线替换 },{
    -- 3)split()根据双竖线分割数组为多个小的json
-- (3)json_tuple()获取json下dutyCode,insuredAmount等节点值
-- 其他节点的字段也可在同一个sql上取,只是每行相同且根据节点dutyInfoList确定行数

INSERT OVERWRITE TABLE DM_PACZ_APPLY_POLICY_DUTYINFOLIST
SELECT current_date AS stat_date
    , a.apply_policy_no
    , d.dutycode
    , NVL(d.insuredamount, 0) AS insuredamount
FROM ${OdsSafeDatabase}.PACZCB_PACZDATA_CZ_POLICY_DETAIL_INFO a
LATERAL VIEW json_tuple(data, 'dutyInfoList') b AS dutyinfolist
LATERAL VIEW explode(split(regexp_replace(regexp_extract(b.dutyinfolist,'^\\[(.+)\\]$',1),'\\}\\,\\{', '\\}\\|\\|\\{'),'\\|\\|')) c AS list
LATERAL VIEW json_tuple(c.list, 'dutyCode', 'insuredAmount') d AS dutycode, insuredamount
;

json_tuple()函数的应用的更多相关文章

  1. hive函数应用之操作json

    1.创建表 createtable.sql中存放的创建表语句如下 create external table adt.jsontest ( appKey string comment "AP ...

  2. hive中的lateral view 与 explode函数的使用

    hive中的lateral view 与 explode函数的使用 背景介绍: explode与lateral view在关系型数据库中本身是不该出现的. 因为他的出现本身就是在操作不满足第一范式的数 ...

  3. Hive—学习笔记(一)

    主要内容: 1.Hive的基本工能机制和概念 2.hive的安装和基本使用 3.HQL 4.hive的脚本化运行使用方式 5.hive的基本语法--建表语法 6.hive的基本语法--内部表和外部表. ...

  4. 【hive】lateral view的使用

    当使用UDTF函数的时候,hive只允许对拆分字段进行访问的 例如: select id,explode(arry1) from table; —错误 会报错FAILED: SemanticExcep ...

  5. 【hive】解析json格式字符串

    (1)解析json中的单个属性  get_json_object(json_str,’$.xxx’/‘$[xxx]’) get_json_object函数第一个参数填写json对象变量(string) ...

  6. MaxCompute 最新特性介绍 | 2019大数据技术公开课第三季

    摘要:距离上一次MaxCompute新功能的线上发布已经过去了大约一个季度的时间,而在这一段时间里,MaxCompute不断地在增加新的功能和特性,比如参数化视图.UDF支持动态参数.支持分区裁剪.生 ...

  7. Hive解析Json数组超全讲解

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

  8. Hive处理Json数据

    Json 格式的数据处理 Json 数据格式是我们比较常用的的一种数据格式,例如埋点数据.业务端的数据.前后端调用都采用的是这种数据格式,所以我们很有必要学习一下这种数据格式的处理方法 准备数据 ca ...

  9. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

随机推荐

  1. vue+Elment-UI,修改element组件样式

    在用vue开发项目过程中,我们总是避免不了的会使用到elementUI,它里面提供的一些组件都为我们的开发带来了很大的便利,但是,当有时候我们需要使用这些组件的同时又要修改下组件的UI样式的话,我们该 ...

  2. 并发编程(4)——AbstractQueuedSynchronizer

    AQS 内部类Node 等待队列是CLH有锁队列的变体. waitStatus的几种状态: static final int CANCELLED = 1; /** waitStatus value t ...

  3. SDS模块

    早上花了一点时间读了下sds的相关源码,其实sds就是构造了两个字段用来记录len和free的状态,然后还有一个char[]用来记录字符串的值. 然后sds模块的函数都是在模拟str的操作. 比较,追 ...

  4. 0x03 前缀和与差分

    前缀和 [例题]BZOJ1218 激光炸弹 计算二位前缀和,再利用容斥原理计算出答案即可. #include <iostream> #include <cstdio> #inc ...

  5. 使用Typora编写博客并发布

    前言 用CSDN写了一段时间,广告漫天飞舞.... 于是在博客园申请了一个账号,然后看见markdown编辑页面的第一眼: 再见^_^ 搜索一波,凭着博客园强大的生态,30多万的用户,第三方的支持应接 ...

  6. 创建docker容器遇到的错误

    1.问题截图 2.问题描述 出现该问题就是docker版本和系统版本不兼容导致的. 现在的系统版本和docker的版本如下: 3.问题解决 安装低版本的docker或者高版本的系统(Centos7.4 ...

  7. 使用sc 命令写脚本 添加和删除服务 简单应用

    添加服务 @echo.服务启动...... @echo off @sc create 服务名 binPath= "%~dp0\服务路径" @sc config 服务名 start= ...

  8. DFS-递归入门

    [递归入门] 题目描述 已知 n 个整数b1,b2,-,bn 以及一个整数 k(k<n). 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和. 例如当 n=4,k=3,4 个整数分别为 ...

  9. 使用spark dataSet 和rdd 解决 某个用户在某个地点待了多长时间

    现有如下数据文件需要处理格式:CSV位置:hdfs://myhdfs/input.csv大小:100GB字段:用户ID,位置ID,开始时间,停留时长(分钟) 4行样例: UserA,LocationA ...

  10. Codeforces 337D

    题意略. 思路: 本题着重考察树的直径.如果我们将这些标记点相连,将会得到大树中的一个子树.我之前只知道树内的点到直径上两端点的距离是最远的,其实,在 整个大树中,这个性质同样适用,也即大树上任意一点 ...