Nifi Json
1. JsonTreeReader와 JsonPathReader의 차이
JsonTreeReader는 전체 JSON을 레코드로 읽거나 최상위 배열의 경우 배열의 각 요소를 (전체적으로) 레코드로 읽습니다. JsonPathReader를 사용하면 전체 흐름 파일 내의 특정 개체 / 레코드 / 필드를 가져 오기 위해 JSONPath 식을 지정할 수 있습니다.
2. SplitJson 과 EvaluateJsonPath 연동 (JSON에서 CSV / 텍스트 추출로 Apache NiFi EvaluateJsonPath를 사용하는 방법)
SplitJson Processor는 Json Array를 분할하는 데 사용되며 EvaluateJsonPath는 Json 필드를 속성 또는 콘텐츠로 추출하는 데 사용됩니다.
- EvaluateJsonPath Processor를 사용하여 Json의 정보 필드를 추출 - 예 :. $ info.seed,. $ info.page,. $ info.version,. $ info.results와 같은 정보 파일을 추출하고 이를 Flowfile 속성으로 저장
- SplitJson Processor 에서 : $.results
- EvaluateJsonPath Processor를 사용하여 Json Array 필드를 추출
3. UpdateRecord
Json의 특정 tag를 읽는다. 임의의 tag를 추가한다. 특정 tag를 수정한다.
- Ref :
- Property
- Record Reader : JsonTreeReader
- Record Writer : JsonRecordSetWriter
- Property
- Output Grouping : One Line Per Object
- Property
- /eqp1TrDets[]/tr_id : /id –> 이전 Processor 출력값의 /eqp1TrDets[] 아래에 /tr_id를 추가한다. (배열 형태다) –> /tr_id의 값으로 이전 Processor의 출력값 중 /id의 값을 입력한다.
4. ConvertRecord
CSV 포맷을 Json 포맷으로 변경한다.
- Ref : https://github.com/kalphageek/apache-nifi-templates/tree/master/Movie%20Extract
- Property
- Record Reader : CSVReader Controller
- Property
- Schema Access Strategy : Use ‘Schema Name’ Property
- Schema name : ${movies.schema.name}
- Schema Registry : AvroSchemaRegistry Contoller
- Property
- Validate field names : true
- movies : <– 직접 생성 ```json { “name”:”movies”, “namespace”:”moviesdata”, “type”:”record”, “fields”:[tJson Processor 에서 : $.results
- Property
- Property
- Record Reader : CSVReader Controller
EvaluateJsonPath Processor를 사용하여 Json Array 필드를 추출
{"name": "movie_id", "type" :"int"},
{"name": "movie_name", "type" :"string"},
{"name": "genre", "type" :"string"}
] } ``` - Record Writer : JsonRecordSetWriter Contoller
* Property
- Schema Writer Strategy : Set 'schema JSON 속성을 속성으로 추출해야 합니다. 이를 위해 EvaulateJSONPath 프로세서를 사용 name' Attribute
- Schema Access Strategy : Use 'Schema Name' Property
- Schema name : ${movies.schema.name}
- Schema Registry : AvroSchemaRegistry Contoller
tJson Processor 에서 : $.results
EvaluateJsonPath Processor를 사용하여 Json Array 필드를 추출 ### 5. SplitJson > Json Array를 분할하는 데 사용. JsonPath Expression에 지정된 배열 요소 분할. 지정된 JsonPath가 없거나 배열 요소로 평가되지 않으면 원본 파일이 '실패'로 라우팅
- Ref : https://github.com/kalphageek/apache-nifi-templates/tree/master/Movie%20Extract
- Property
- Json Path Expression : $.[*]
- Json Path Expression : $.eqp1TrDets