ETL工具-nifi乾貨系列 第七講 處理器JoltTransformJSON(續)

慕容尘轩發表於2024-04-02

第六講教程只簡單介紹了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

相關文章