2016-12-09 8 views
0

私はmysql test.employeeとハイブdefault.deptの2つのテーブルを持っています 私はハイブのクエリにtest.employeeテーブルのempidを渡したいと思いますテーブルとストアデータHDFSApache NiFiでexecuteSQLからSelectHiveQLに動的に値を渡す方法

は、ExecuteSQLに - TEST.EMPLOYEEから>選択EMPID(10件のレコードを与える)

SelectHiveQL - > SELECT * FROM default.dept EMPID = $ {EMPID}(10件のレコードを取得すべきです)

image description here

答えて

1

あなたは、次の操作を行うことができます:

  1. は、ExecuteSQLを - 行につき1つのフローファイルへ
  2. EvaluateJsonPathを分割する -
  3. EMPID SplitJsonの後の処理のために - 従業員レコード
  4. ConvertAvroToJsonを取得するために - empidの値をフローファイル属性にする
  5. ReplaceText - HiveQLステートメントにコンテンツを設定する(上記のように式言語を使用)
  6. SelectHiveQL - 部署レコードを取得する

これは、各Hidden SELECTを実行して、SelectHiveQLを実行するたびに1つのレコードが生成されることに注意してください。私は確信していません(たとえば、IN句のHiveQLセマンティクスでは)単一のHiveQLステートメントを取得する方法は、「テーブルの定数」とHiveテーブルの間の結合のようなものなので、NiFi処理はもちろんですあなたはSplitJsonを望まないので、一度にすべてのレコードを処理しなければならない可能性が高いです(ExecuteScriptなど)

+0

返信ありがとう、私は同じ方法で試しましたが、適切ではありませんでした結果。 SplitJson、EvaluateJsonPath、ReplaceText、およびSelectHiveQLの設定プロパティを共有できますか? – Akhil

0
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} 
+0

ReplaceTextにSQL文全体を入れて、SelectHiveQLにSelect Queryプロパティを空白のままにしておけば、その場合はフローファイルの内容をQueryとして使用する必要があります。 – mattyb

関連する問題