第六讲教程只简单介绍了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. 力扣696(java)-计数二进制子串(简单)

    题目: 给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的. 重复出现(不同位置)的子串也要统计它们出现的次 ...

  2. 一文详解用eBPF观测HTTP

    简介: 随着eBPF推出,由于具有高性能.高扩展.安全性等优势,目前已经在网络.安全.可观察等领域广泛应用,同时也诞生了许多优秀的开源项目,如Cilium.Pixie等,而iLogtail 作为阿里内 ...

  3. Dubbo-go 优雅上下线设计与实践

    ​简介:在分布式场景下,微服务进程都是以容器的形式存在,在容器调度系统例如 k8s 的支持下运行,容器组 Pod 是 K8S 的最小资源单位.随着服务的迭代和更新,当新版本上线后,需要针对线上正在运行 ...

  4. iLogtail使用入门-iLogtail本地配置模式部署(For Kafka Flusher)

    ​简介:iLogtail使用入门-iLogtail本地配置模式部署(For Kafka Flusher). 阿里已经正式开源了可观测数据采集器iLogtail.作为阿里内部可观测数据采集的基础设施,i ...

  5. 干货|一文读懂阿里云数据库Autoscaling是如何工作的

    简介: 阿里云数据库实现了其特有的Autosaling能力,该能力由数据库内核.管控及DAS(数据库自治服务)团队共同构建,内核及管控团队提供了数据库Autoscaling的基础能力,DAS则负责性能 ...

  6. 实时数仓入门训练营:实时计算 Flink 版 SQL 实践

    ​简介: <实时数仓入门训练营>由阿里云研究员王峰.阿里云资深技术专家金晓军.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭 ...

  7. Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/xxx". at createRouterError 的说明和解决

    错误说明 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: & ...

  8. k8s安全---安全机制之RBAC授权(14)

    一.k8s 安全管理:认证.授权.准入控制概述 k8s 对我们整个系统的认证,授权,访问控制做了精密的设置:对于 k8s 集群来说,apiserver 是整 个集群访问控制的唯一入口,我们在 k8s ...

  9. Git的操作使用

    Git结构: # 工作区:当前编辑的区域 # 缓存区:add之后的区域 # 本地仓库:commit之后的区域 # 远程仓库:GitHub,gitlab,码云... 一.Git的初步认识 一.Git是什 ...

  10. 局域网内一部分网络设备无法ping通,icmp_seq=1 目标主机不可达

    问题: 来自 192.168.2.99 icmp_seq=1 目标主机不可达.   最近想在局域网内搭建一台服务器,打开SSH服务后发现局域网内的一部分设备无法使用,尝试了各种办法都没能解决,重装系统 ...