直接举栗子说明用法吧:

  下面是来自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. LASSO原作者的论文,来读读看

    Regression Shrinkage and Selection via the lasso 众所周知,Robert Tibshirani是统计领域的大佬,这篇文章在1996年提出了LASSO,之 ...

  2. (15)ASP.NET Core Web主机(IWebHostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...

  3. Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接

    ---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...

  4. element ui 登录验证,路由守卫

    <template> <!-- el-form :label-position="labelPosition" 设置label的位置 :model 用来给表单设置 ...

  5. 洛谷 P4124 [CQOI2016]手机号码

    题意简述 求l~r之间不含前导零,至少有三个相邻的相同数字,不同时含有4和8的11位正整数的个数 题解思路 数位DP,注意在l,r位数不够时补至11位 代码 #include <cstdio&g ...

  6. 垂直渐变的Button

    public partial class RoundButton : Button { Rectangle r; private Brush _myBrush = null; , , ); , , ) ...

  7. centos7 yum搭建lnmp环境及配置wordpress超详细教程

    yum安装lnmp环境是最方便,最快捷的一种方法.源码编译安装需要花费大量的人类时间,当然源码编译可以个性化配置一些其它功能.目前来说,yum安装基本满足我们搭建web服务器的需求. 本文是我根据近期 ...

  8. gunicorn 基础配置使用

    flask 自带的 web 服务器稳定性较差,只能用于测试.最近做的 web 项目,每次启动,需要敲一堆参数文件,今天学习了官方文档里关于配置的说明,记录一下. 创建一个 gunicorn.conf ...

  9. Zabbix-设置自动发现规则实例

    一.前文 此篇文章,主要针对自动发现规则中使用snmpv2类型发现 zabbix官方解读,可当参考:   https://www.zabbix.com/documentation/4.0/zh/man ...

  10. go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

    面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对 ...