欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ETL 工具-nifi 主干网系列 第 7 节 处理器 JoltTransformJSON(续)

最编程 2024-04-06 17:44:04
...

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