首页 > 其他分享 >ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)

ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)

时间:2024-04-02 18:32:16浏览次数:19  
标签:nifi name id myName 小金刚 JoltTransformJSON Jolt Javax ETL

第六讲教程只简单介绍了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

标签:nifi,name,id,myName,小金刚,JoltTransformJSON,Jolt,Javax,ETL
From: https://blog.csdn.net/zhangjin1222/article/details/137277361

相关文章

  • ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON
    1、处理器作用使用Jolt转换JSON数据为其他结构的JSON,成功的路由到'success',失败的'failure'。处理JSON的实用程序不是基于流的,因此大型JSON文档转换可能会消耗大量内存。Jolt:JSON到JSON转换库,用Java编写,其中转换的"规范"或者描述文件本身就是一个JSON文档。2、属性......
  • 深入解析大数据体系中的ETL工作原理及常见组件
    **引言关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理关联阅读博客文章:深入理解HDFS工作原理:大数据存储和容错性机制解析**在当今数字化时代,大数据处理已经成为了企业成功的重要组成部分。而在大数据处理中,ETL(Extract,Transform,Load)是至关重要的一环,它......
  • 多目标应用:基于非支配排序的蜣螂优化算法(Non-Dominated Sorting Dung beetle optimize
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobSchedulingProblem,FJSP)的描述如下:n个工件{J,J......
  • Netlify 就你妈傻逼
    因为脑残所以想从GithubPages转移到Netlify上。然后我他妈登陆Netlify告诉我账号有可疑行为被停用了。我可疑你妈呢?行行行,用manualverification行了吧?我现在等了快一周了还是什么消息都没有。注册一个新的号行了吧?收不到验证码。草这不是我的问题啊。几遍都收不到。......
  • 客快物流大数据项目(四十):ETL实现方案
    目录ETL实现方案一、ETL处理流程图二、为什么使用Kudu作为存储介质ETL实现方案一、​​​​​​​ETL处理流程图数据来源:来自于ogg同步到kafka的物流运输数据来自于canal同步到kafka的客户关系数据二、为什么使用Kudu作为存储介质数据库数据上的快速分析目前......
  • ETLCloud结合Oracle实现CDC
    CDC,即Change Data Capture(变更数据捕获)功能,主要针对实时数据同步和更新场景,能够实时监测数据库中的数据变化,并将发生变化的数据进行高效精准地捕获和传输,极大地提高了数据处理的效率以及系统的响应速度。在实际应用中,CDC功能对于对数据时效性要求极高的业务场景尤为关键,例如金......
  • ETL工具-nifi干货系列 第五讲 处理器GenerateFlowFile
    1、今天我们一起来学习处理器GenerateFlowFile。这个处理器创建带有随机数据或自定义内容的FlowFiles。GenerateFlowFile对于负载测试、配置和模拟非常有用。从工具栏拖动处理器到画布,然后选择GenerateFlowFile即可。 2、点击add按钮或者双击 GenerateFlowFile可将此处理器......
  • Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers File exists处理
    Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINKanswers:Fileexists处理安装好centos7版本的系统后,发现默认的网卡名字有点怪,为了便于管理,可以手动修改。下面对centos7版本下网卡重命名操作做一记录:1.编辑网卡信息[root@web~]#cd/etc/sysconfig/network-scripts/......
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键
    一、简介在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。二、安装petl和psycopg2首先,我们需要安装petl和psycopg2......
  • ETL工具-nifi干货系列 第四讲 Avro schema 序列化框架
    一、在使用nifi的过程中会使用到遇到avroschema、avrodata、avroReader、avroWriter等,所以本节课和大家一起学习下avro相关知识。 二、什么是AvroApacheAvro是hadoop中的一个子项目,也是一个数据序列化系统,其数据最终以二进制格式,采用行式存储的方式进行存储。三、什么......