1 분 소요

1. JsonTreeReader와 JsonPathReader의 차이

JsonTreeReader는 전체 JSON을 레코드로 읽거나 최상위 배열의 경우 배열의 각 요소를 (전체적으로) 레코드로 읽습니다. JsonPathReader를 사용하면 전체 흐름 파일 내의 특정 개체 / 레코드 / 필드를 가져 오기 위해 JSONPath 식을 지정할 수 있습니다.

2. SplitJson 과 EvaluateJsonPath 연동 (JSON에서 CSV / 텍스트 추출로 Apache NiFi EvaluateJsonPath를 사용하는 방법)

SplitJson Processor는 Json Array를 분할하는 데 사용되며 EvaluateJsonPath는 Json 필드를 속성 또는 콘텐츠로 추출하는 데 사용됩니다.

  1. EvaluateJsonPath Processor를 사용하여 Json의 정보 필드를 추출 - 예 :. $ info.seed,. $ info.page,. $ info.version,. $ info.results와 같은 정보 파일을 추출하고 이를 Flowfile 속성으로 저장
  2. SplitJson Processor 에서 : $.results
  3. 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
    • /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

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가 없거나 배열 요소로 평가되지 않으면 원본 파일이 '실패'로 라우팅