第六讲教程只简单介绍了Jolt的chain转换模式,本节课介绍下Jolt的各种转换模式。

点击的处理器JoltTransformJSON高级配置选项,进行测试Jolt的转换模式。

1、Cardinality:更改了输入JSON数据元素的基数,适用于jsonObj和jsonList 之间的转换。

list转为obj

input

{
"review": {
"nameArry": ["Javax 小金刚", "Javax 大金刚"]
},
"data": {
"nameList": [{
"id": "1",
"name": "Javax 小金刚"
}, {
"id": "2",
"name": "Javax 大金刚"
}]
},
"isMap": {
"singleName": "Javax 小金刚"
},
"myName": "Javax 小金刚",
"emptyListContainer": {
"emptyList": []
},
"nullData": null
}

Jolt Specification

{

        "review" : {
"nameArry" : "ONE"
}, "data" : {
"nameList" : "ONE"
}, "isMap" : "ONE", "myName" : "ONE", "emptyListContainer" : {
"emptyList" : "ONE"
}, "nullData" : "ONE" }

output

{
"review": {
"nameArry": "Javax 小金刚"
},
"data": {
"nameList": {
"id": "1",
"name": "Javax 小金刚"
}
},
"isMap": {
"singleName": "Javax 小金刚"
},
"myName": "Javax 小金刚",
"emptyListContainer": {
"emptyList": null
},
"nullData": null
}

obj转为list

input

{
"myName" : "Javax 小金刚"
}

Jolt Specification

{
"myName" : "MANY"
}

output

{
"myName": ["Javax 小金刚"]
}

2、Default:如果输入中不存在指定的字段,则添加默认值。

input

{
"myName" : "Javax 小金刚"
}

Jolt Specification

{
"age" : 18
}

output

{
"myName": "Javax 小金刚",
"age": 18
}

3、Modify -Default:修改字段的值,如果字段不存在则添加默认值,如果字段存在不做处理。

input

{
"myName" : "Javax 小金刚",
"playGames":"太空战士"
}

Jolt Specification

{
"playGames":"过家家"
}

output

{
"myName": "Javax 小金刚",
"playGames": "太空战士"
}

4、Modify - Define:修改字段的值,如果字段不存在则创建该字段并赋值,测试结果同Modify - Define。

5、Modify - Overwrite:修改字段的值,如果字段不存在则忽略,存在的话强制覆盖。

input

{
"myName" : "Javax 小金刚",
"playGames":"太空战士"
}

Jolt Specification

{
"playGames":"过家家"
}

output

{
"myName": "Javax 小金刚",
"playGames": "过家家"
}

6、Remove:移除指定的字段。

input

{
"myName" : "Javax 小金刚",
"playGames":"太空战士"
}

Jolt Specification

{
"playGames":""
}

output

{
"myName": "Javax 小金刚"
}

7、Shift:将字段的值移动到另一个字段下。

input

{
"name" : "Javax 小金刚",
"id":"1"
}

Jolt Specification

{
"name":"person.name",
"id":"person.id"
}

output

{
"person": {
"name": "Javax 小金刚",
"id": "1"
}
}

8、Sort:对对象中的字段进行排序(按字母顺序)。

input

{
"d":"test1",
"c":"test2",
"b":"test3",
"a":"test4"
}

Jolt Specification

output

{
"a": "test4",
"b": "test3",
"c": "test2",
"d": "test1"
}

9、Custom:自定义转换规则,需要自定义转换插件,后续讲解,本次略。

10、Chain:按顺序应用多个转换规则,将上面提到的规则合并到一起顺序执行多个转换规则。

input

  {
"id":"1",
"name":"Java小金刚"
}

Jolt Specification

[
{
"operation": "shift",
"spec": {
"id":"person.id",
"name":"person.name"
}
},
{
"operation": "default",
"spec": {
"ext":"备注"
}
}
]

output

{
"person": {
"id": "1",
"name": "Java小金刚"
},
"ext": "备注"
}

注:这里仅仅介绍了常用的示例,实际工作用更多的是用到chain这个。还有很多高级的用法,大家可以自行探索下。

传送门:https://github.com/bazaarvoice/jolt/tree/master/jolt-core/src/test/resources/json

ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)的更多相关文章

  1. 开源ETL工具kettle系列之常见问题

    开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...

  2. Spring Boot干货系列:(七)默认日志框架配置

    Spring Boot干货系列:(七)默认日志框架配置 原创 2017-04-05 嘟嘟MD 嘟爷java超神学堂 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候, ...

  3. 数据仓库系列之ETL过程和ETL工具

    上周因为在处理很多数据源集成的事情一直没有更新系列文章,在这周后开始规律更新.在维度建模中我们已经了解数据仓库中的维度建模方法以及基本要素,在这篇文章中我们将学习了解数据仓库的ETL过程以及实用的ET ...

  4. etl学习系列1——etl工具安装

    ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可 ...

  5. (转)Spring Boot干货系列:(七)默认日志logback配置解析

    转:http://tengj.top/2017/04/05/springboot7/ 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的, ...

  6. JVM基础系列第5讲:字节码文件结构

    温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看. 前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件. ...

  7. ETL工具的功能和kettle如何来提供这些功能

    不多说,直接上干货! 大家会有一个疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了 ...

  8. ASP.NET 5系列教程(七)完结篇-解读代码

    在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...

  9. Wix打包系列(七) 添加系统必备组件的安装程序

    原文:Wix打包系列(七) 添加系统必备组件的安装程序 我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件.这里以.Net Fr ...

  10. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...

随机推荐

  1. 跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA

    简介: 本⽂简要介绍我们在电商下对CLIP模型的优化,以及上述模型在公开数据集上的评测结果.最后,我们介绍如何在EasyNLP框架中调用上述电商CLIP模型. 作者:熊兮.欢夏.章捷.临在 导读 多模 ...

  2. Apache Flink 在汽车之家的应用与实践

    ​简介: 汽车之家如何基于 Flink 上线了 AutoStream 平台并持续打磨. 本文整理自汽车之家实时计算平台负责人邸星星在 Flink Forward Asia 2020 分享的议题< ...

  3. 谁来拯救存量SGX1平台?又一个内核特性合并的血泪史

    ​简介: 今天的故事主角,是一个被称为Flexible Launch Control的SGX平台特性. ​ 前言 自从Intel内核开发人员Jarkko Sakkinen于2017年9月2日在inte ...

  4. 深入理解 C++ 中的多态与文件操作

    C++ 多态 多态(Polymorphism)是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为.在 C++ 中,多态通常通过继承和虚函数来实现. 理解多态 想象一个场景, ...

  5. 【GUI界面软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!

    目录 一.背景说明 1.1 效果演示 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景说明 1.1 效果演示 ...

  6. 9、iptables 防火墙

    1.iptables 基础规则 1.1.Linux 包过滤防火墙 netfilter 位于 Linux 内核中的包过滤功能体系 称为 Linux 防火墙的 "内核态" iptabl ...

  7. 06. C语言指针

    [指针] C语言使用数据名调用数据,数据名相当于C语言的直接寻址,直接寻址只能调用固定数据,而指针是间接寻址,指针存储了另一个数据的地址,使用指针调用数据时首先取指针存储的内存地址,之后使用此地址调用 ...

  8. Cesium教程10-把影像和天空改成背景图片

    在使用Cesium引擎时,我们经常要使用大屏适配导致地球或者模型的黑色天空盒和大屏的样式不匹配造成场景不好看的情况,这样就可以用到我们修改Cesium的天空为纯色背景,与大屏更适配,直接上代码. &l ...

  9. C数据结构:树和森林存储方式与遍历方式

    文章目录 树的存储方式 双亲表示法 孩子链表表示法 孩子兄弟表示法(二叉树表示法) 树和二叉树的转换 森林和二叉树的转换 树和森林的遍历 树的遍历方式 森林的遍历方式 浅谈一下几个问题 为什么树没有中 ...

  10. Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?

    @Autowired和@Resource都是Java Spring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC).它们的区别主要在以下三个方面: 源头不同  @Autowired是Spri ...