2017-11-23 17 views
0

Apache NiFiの使用JSONフローファイル内のすべての要素に、他の2つのフィールドの連結に基づいて新しいフィールドを追加します。私はこのためにJoltTransformJSONプロセッサを使用しようとしていますが、使用したいJolt変換はオンラインtoolsを使用してもOKですが、NiFiでは動作しません。私はバージョンの問題を疑うが、私のJolt仕様では何か愚かかもしれない。JSONでのconcatのサポートApacheでのJolt NiFi

JSONは次のようになり、入力...私が欲しい

[ 
    { 
    "id": 485842, 
    "cc": 1, 
    "x": 0, 
    "y": null 
    }, 
    { 
    "id": 281733, 
    "cc": 1, 
    "x": 0, 
    "y": 10 
    }, 
    { 
    "id": 721412, 
    "cc": 12, 
    "x": 0, 
    "y": null 
    } 
] 

所望の出力が...これで

[ { 
    "id" : 485842, 
    "cc" : 1, 
    "x" : 0, 
    "y" : null, 
    "id_cc" : "485842_1" 
}, { 
    "id" : 281733, 
    "cc" : 1, 
    "x" : 0, 
    "y" : 10, 
    "id_cc" : "281733_1" 
}, { 
    "id" : 721412, 
    "cc" : 12, 
    "x" : 0, 
    "y" : null, 
    "id_cc" : "721412_12" 
} ] 

そして、Joltはオンラインsiteに私が使用して変換..ですNiFiで。

[{ 
    "operation": "modify-default-beta", 
    "spec": { 
    "*": { 
     "id_cc": "=concat(@(1,id),'_',@(1,cc))" 
    } 
    } 
}] 

、私はを持っているJoltTransformJSONプロセッサを設定と私はこのわずかに変更されたJolt仕様を使用します...

NiFiはこれを有効にしてプロセスを実行します。この問題を解決するか、そこには、シフト操作を使用しても、簡単な方法であるだろう変更 - デフォルトの動作への迅速な修正があり、出力JSONは、単一のレコードだけで構成され、新しいフィールドは、この

"operation": "modify-default" 

のように追加されます?

ありがとうございます。

+0

select(select id、cc、x、y、CAST(id AS VARCHAR)|| '_' || CAST(cc AS VARCHAR)AS id_cc FROMFILE)でQueryRecordプロセッサを使用できます。私は後で答えを書くつもりです。 – tonykoval

答えて

0

私は同僚の助けを借りて、この作業を行う方法を見つけました。

最初に、プロセッサのJolt Transformation DSLプロパティをChainに設定します。

は、第二に、次のようにJoltの仕様を設定しbetaが動作しているよう...

[{ 
    "operation": "modify-default-beta", 
    "spec": { 
     "*": { 
     "id_cc": "=concat(@(1,id),'_',@(1,cc))" 
     } 
    } 
}] 

[]が不可欠です。

第3に、Joltプロセッサに供給されるJSONが配列であることを確認します。

これをすべて修正すると、期待される出力が得られます。