문제

Hive에서 열을 쿼리하고 MySQL DB에서 쿼리하려는 출력을 기반으로 요구 사항이 있습니다.

흐름은 아래와 같습니다 :

  1. 쿼리 하이브 테이블, IDS 목록을 얻으십시오
  2. ID 목록을 사용하여 MySQL 테이블을 쿼리합니다.쿼리는 select a,b,c from x where id in (list from hive)
  3. 와 같습니다.

    어떻게해야합니까?

도움이 되었습니까?

해결책

ID를 검색하기 위해 ThiveInput 구성 요소를 사용하여 쿼리를 만들어야합니다. 두 가지 옵션, 쉬운 방법 또는 하드 (및 더 나은) 방식으로 :

쉬운 방법을 위해 ThiveInput 구성 요소에서 TFlowtoIterate로 실행 한 다음 TmySqlInput 구성 요소로 반복 할 수 있습니다. tmysqlinput 구성 요소의 쿼리는 다음과 같습니다.

"SELECT a, b, c
FROM x
WHERE id = '" + ((Integer)globalMap.get("row1.id")) + "'"
.

Row1 여기에 해 클토리 인테리어스로 실행되는 행을 나타냅니다. Ctrl + 공간을 치고 tFlowToIterate_x.id 옵션을 선택 하여이 변수를 얻을 수도 있습니다.

TMYSQLInput 구성 요소에 TMYSQLINPUT 구성 요소에 연결하여 모든 반복을 수집 한 다음 추가 처리를 위해 TBufferInput 구성 요소로 다시 읽을 수 있습니다.

이것은 분명히 효율성과 물론 SQL 주입에 열려있는 가장 좋은 방법이 아닌 간단한 연결입니다. 그러나 거친 준비가되어 있습니다.

다른 (어렵지만 잠재적으로 더 나은) 옵션은 현재 TMYSQLROW 구성 요소 (현재 TMYSQLINPUT 구성 요소의 TALEND 5.4에서 지원되지 않음)를 사용하여 매개 변수화 된 쿼리를 사용하는 것입니다.

이 답변 다른 문제에 대한 해결책의 일부로 탐색의 매개 변수화 된 쿼리에 대해 자세히 설명합니다 (효율적으로) ...에 그 답변에서 언급했듯이 Gabriele Baldassarre의 블로그 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top