하이브의 입력을 기반으로 MySQL의 TATEND 쿼리 데이터
문제
Hive에서 열을 쿼리하고 MySQL DB에서 쿼리하려는 출력을 기반으로 요구 사항이 있습니다.
흐름은 아래와 같습니다 :
- 쿼리 하이브 테이블, IDS 목록을 얻으십시오
- ID 목록을 사용하여 MySQL 테이블을 쿼리합니다.쿼리는
select a,b,c from x where id in (list from hive)
와 같습니다.
어떻게해야합니까?
해결책
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의 블로그 .