2014-02-25 6 views
0

Greenplum에서 꺼내 진 데이터에서 매 시간마다 채워야하는 테이블이 있습니다.이 테이블은 Greenplum 서버에 저장됩니다.greenplum DB에서 작동하는 postgreSQL 쿼리 스케줄링

그래서 내가 알고 싶은 것은 (파이썬 스크립트, 윈도우 스케줄러 또는 기타) 어떤 방법 (내 생각에 60GB 이상의 거대한 데이터 일 수 있음)이 쿼리 일정에 사용되어야한다는 것입니다. (postgreSQL로 작성)을 매시간 실행해야합니다.

누군가가 동일한 코드를 첨부 할 수 있습니까?

답변

0

Greenplum과 PostgreSQL의 데이터 범위가 병렬 인 COPY 개를 원할 것입니다. 빠른 데이터로드를 위해 PostgreSQL이 설정되었는지 확인하십시오. 가능하면 UNLOGGED 테이블을 사용하십시오. 그렇지 않으면 적어도 wal_level = 'minimal'을 사용하십시오.

병렬 작업자의 수는 PostgreSQL 서버의 I/O 하위 시스템에 달려 있습니다. 시험하고 봐라.

psycopg2 및 copy_expert 커서 기능이있는 Python을 사용하는 것이 좋습니다. the docs을 참조하십시오. 파이프와 함께 멀티 프로세싱을 사용하여 판독기와 작성자 작업자간에 파일 유사 객체를 공유 할 수 있습니다. 판독기는 greenplum에 연결되고 작성기는 PostgreSQL에 연결됩니다.

그래서 효과적으로 각 노동자는 무언가를 다음 쉘 의사 코드 같은 비트 :

psql -h greenplum-box \ 
    -c "COPY (SELECT * FROM mytable WHERE id BETWEEN 1 AND 10000) TO stdin" \ 
    | \ 
psql -h postgres-box \ 
    -c "COPY myttable FROM stdin"; 

(하지만 당신은이 업 pyscopg2, copy_export, 멀티 및 파이프를 사용하여 연결).

나중에 색인 생성과 같은 일반적인 빠른 로딩 작업을 모두 수행하십시오. how to speed up insertion performance in PostgreSQL을 참조하십시오.

디스크 공간이있는 경우 dataload_temp과 같은 표를 만든 다음 한 트랜잭션에서 이전 트랜잭션을 삭제하고 새 트랜잭션의 이름을 이전 이름으로 바꿉니다. 그렇게하면 혼란이 최소화됩니다.

오프라인 (비 스트리밍) 대량 데이터로드에 대해서는 pg_bulkload을 참조하십시오.

+0

@ craig.. 나는 GP, postgreSQL 및 Python을 모두 한꺼번에 배우고 있으며 나는 지난 20 시간 동안 만 작업 해왔다. 링크는 도움이되지만 하나의 혼란이 있습니다 –

+0

@ craig .. GP, postgreSQL 및 Python을 모두 한꺼번에 배우고 있으며 지난 20 시간 동안 만 작업했습니다. 링크는 도움이되지만 필자는 다음과 같은 종류의 cur.execute (테이블 abc ..... 생성)의 쿼리를 가지고 있다면 copy_to와 copy_from을 사용할 필요가있다. cur.execute (테이블 abc 값에 삽입 ...(고르다....)); –

+0

@ user3336746 *'INSERT INTO ... '대신'COPY ... FROM STDOUT' *을 사용합니다. 데이터를로드하는 더 효율적인 방법입니다. PostgreSQL 사용자 설명서를 참조하십시오. http://www.postgresql.org/docs/current/static/sql-copy.html. 그리고'COPY ... TO STDOUT'을 사용하여 Greenplum에서 데이터를 추출 할 수 있습니다. 따라서 DB 사이에 데이터를 스트리밍하기 위해 파이프를 사용하여 둘을 연결하는 것이 좋습니다. –