2016-07-19 1 views
0

누구든지 CONNECT BY Oracle 쿼리를 Greenplum으로 변환하는 방법을 제안 할 수 있습니까? Greenplum은 재귀 쿼리를 지원하지 않습니다. 따라서 RECURSIVE WITH을 사용할 수 없습니다. 아래의 쿼리를 다시 쓸 수있는 대안이 있습니까?greenplum에서 CONNECT BY를 변환하는 방법

SELECT child_id, Parnet_id, LEVEL , SYS_CONNECT_BY_PATH (child_id,'/') as HIERARCHY 
FROM pathnode 
START WITH Parnet_id = child_id 
CONNECT BY NOCYCLE PRIOR child_id = Parnet_id; 

답변

0

이렇게하는 방법이 있지만 쿼리 당 일회 일 수 있습니다. pathnode 테이블을 반복하고 "next를 반환"하여 각 행을 반환하는 함수를 만들어야합니다. 이 사이트에서 PostgreSQL 8.2로이 작업을 수행하는 예제를 검색 할 수 있습니다.

Greenplum을 PostgreSQL 8.3, 8.4 등에 리베이스하는 작업이 진행 중입니다. 그 이후 PostgreSQL 버전은 SQL을 작성하는 ANSI SQL 방식 인 "재귀 적"을 지원하지만 Greenplum은 SQL을 아직 지원하지 않습니다. 그것이 Greenplum에 의해 지원받을 때, 나는 그것이 모두 잘 수행 할 것이라고 생각하지 않습니다. 쿼리는 루핑 및 개별 행 조회를 강제 실행합니다. 이것은 OLTP 데이터베이스에서 훌륭하게 작동하지만 MPP 데이터베이스에는 적합하지 않습니다.

오라클에서 VIEW로 데이터를 변환 한 다음보기를 파일로 덤프하여 Greenplum으로로드하는 것이 좋습니다. 자체 참조 N 수준 테이블을 갖는 DDL은 MPP 데이터베이스에서 좋은 아이디어가 될 수 없습니다.

+0

감사합니다. 나는 재귀 함수를 만들었다. 그것은 N 수준을 위해 잘 작동합니다. – Syamala