2017-03-20 6 views
0

여러 SQL 문이있는 SQL 파일이 있으며 Kettle/Pentaho PDI 6.1.0을 사용하여 텍스트 파일에서 읽어야합니다.Pentaho PDI/Kettle은 텍스트 파일에서 여러 줄을 읽습니다.

모든 문은 세미콜론을 사용하여 구분합니다, 그러나 각 문장은 여러 줄에 걸쳐 스팬 될 수있다

CREATE TABLE Staging01 AS 
SELECT .... 
WHERE ...; 

UPDATE Staging01 
SET .... 
WHERE ...; 

은 내가 하나의 문자열로 각 SQL 문을 고려하여 파일을 구문 분석 할 필요가있다.

텍스트 입력 파일 단계를 사용하려고했지만 항상 한 줄씩 데이터를 읽습니다.

도와 주시겠습니까?

감사합니다.

+1

은 CSV 입력 단계를 취합니다. 을 입력하고 사용중인 구분 기호를 지정하십시오. 작동합니다. –

답변

0

SQL 명령의 모든 행을 그룹화하기 위해 열을 추가 한 후에 "행 비정규 기"를 사용해야한다고 생각합니다.이 새로운 필드는 ";"이 발생할 때 변경됩니다. 또한 얻으려면 ";" 스트림에서 구분 기호로 지정하지 마십시오.

0

텍스트 파일 입력이 괜찮습니다. 모든 행을 단일 입력란으로 읽습니다. FIXED 모드와 충분히 큰 필드 크기를 선택하여 line이라는 필드를 만듭니다. 오른쪽에서 트리밍을 활성화하는 것을 잊지 마십시오.

샘플 입력이 있으면 빈 줄을 삭제하고 (기본 설정은 TFI 임) 문을 구성하는 줄을 연결하는 것입니다. 그룹의 마지막 줄은 세미콜론으로 끝나는 것을 알고 있습니다. 의이 _seq는 우리의 목적을위한 일회성 인 사용자 정의 - 자바 표현을 line.endsWith(";") ? 1 : 0

필드를 사용하여 시퀀스 _seq을 만들어 보자, 그래서 우리는 필드 seq 결과, 앞서 한 행을 들여다 분석-쿼리를 사용합니다. If-Field-Value-Is-Null은 쓸모없는 null 값을 0으로 바꿀 것입니다.

이제 Group-By를 사용하여 group을 누적 합계로 계산하여 seq으로합시다.

결국 우리는 group 필드를 사용하여 line에 공백 문자를 연결할 수 있습니다.

이것은 하나의 데이터 흐름 솔루션입니다. 간단한 FSM 스크립트를 작성할 수는 있지만 왜 주전자를 사용합니까?