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
을 참조하십시오.
@ craig.. 나는 GP, postgreSQL 및 Python을 모두 한꺼번에 배우고 있으며 나는 지난 20 시간 동안 만 작업 해왔다. 링크는 도움이되지만 하나의 혼란이 있습니다 –
@ craig .. GP, postgreSQL 및 Python을 모두 한꺼번에 배우고 있으며 지난 20 시간 동안 만 작업했습니다. 링크는 도움이되지만 필자는 다음과 같은 종류의 cur.execute (테이블 abc ..... 생성)의 쿼리를 가지고 있다면 copy_to와 copy_from을 사용할 필요가있다. cur.execute (테이블 abc 값에 삽입 ...(고르다....)); –
@ user3336746 *'INSERT INTO ... '대신'COPY ... FROM STDOUT' *을 사용합니다. 데이터를로드하는 더 효율적인 방법입니다. PostgreSQL 사용자 설명서를 참조하십시오. http://www.postgresql.org/docs/current/static/sql-copy.html. 그리고'COPY ... TO STDOUT'을 사용하여 Greenplum에서 데이터를 추출 할 수 있습니다. 따라서 DB 사이에 데이터를 스트리밍하기 위해 파이프를 사용하여 둘을 연결하는 것이 좋습니다. –