복붙노트

[HADOOP] executeSQL에서 SelectHiveQL 아파치 NiFi에 동적으로 값을 전달하는 방법

HADOOP

executeSQL에서 SelectHiveQL 아파치 NiFi에 동적으로 값을 전달하는 방법

나는 하이브 default.dept 기타와 MySQL test.employee에서 두 테이블 하나가 나는 HDFS에 하이브 테이블 및 저장 데이터를 쿼리 매개 변수로 test.employee 테이블의 EMPID를 전달하려는

ExecuteSQL -> test.employee에서 EMPID 선택 (10 개 개의 레코드를 제공합니다)

SelectHiveQL -> default.dept * FROM을 선택할 경우 EMPID = $ {EMPID} (10 개 레코드를 검색한다)

여기에 이미지 설명

해결법

  1. ==============================

    1.당신은 다음 작업을 수행 할 수 있습니다 :

    당신은 다음 작업을 수행 할 수 있습니다 :

    이것은 EMPID 각 값의 하이브 SELECT를 실행한다는 점에 유의 SelectHiveQL 실행할 때마다 하나의 레코드를 생성한다. 나는 그것이는 "상수 표"및 하이브 테이블 간의 조인의 종류이기 때문에하지 NiFi 처리가 더 언급, 하나의 HiveQL 문을 얻는 방법 (예를 들어, IN 절에 주어진 HiveQL 의미) 확실하지 않다 단지 당신이 SplitJson을 싶지 않을 것입니다 가능성 번에 모든 레코드를 처리 할 것 같은 (ExecuteScript, 예를 들면 포함)

  2. ==============================

    2.

    ExecuteSQL ->SplitAvro ->ConvertAvroToJson -> EvaluateJsonPath -> ReplaceText ->SelectHiveQL -> PutHDFS
    
    ExecuteSQL       ==> Query -> select empid from employees
    EvaluateHsonPath ==> destination ->flowfile-attribute
                     ==> empid = $.empid
    ReplaceText      ==> ReplacementValue  -> ${empid}
    SelectHiveQL   -> select * from dept where empid = ${empid}
    
  3. from https://stackoverflow.com/questions/41057483/how-to-pass-values-dynamically-in-apache-nifi-from-executesql-to-selecthiveql by cc-by-sa and MIT license