Aurora PostgreSQL Limitless Database에서 COPY 명령 사용
psql
유틸리티의 \copy
COPY 명령을 사용하여 Aurora PostgreSQL Limitless Database로 데이터 로드
Aurora PostgreSQL Limitless Database는 데이터 가져오기에서 psql
유틸리티의 \copy
Aurora PostgreSQL과 같은 Limitless Database에서는 다음이 지원되지 않습니다.
-
DB 인스턴스에 대한 직접 SSH 액세스 - 데이터 파일(예: .csv 형식)을 DB 인스턴스 호스트에 복사하고 파일에서
COPY
를 실행할 수 없습니다. -
DB 인스턴스에서 로컬 파일 사용 -
COPY ... FROM STDIN
및COPY ... TO STDOUT
을 사용합니다.
PostgreSQL의 COPY
명령에는 로컬 파일(FROM/TO
)로 작업하고 클라이언트와 서버(STDIN/STDOUT
) 간의 연결을 사용하여 데이터를 전송하는 옵션이 있습니다. 자세한 내용은 PostgreSQL 설명서의 COPY
PostgreSQL psql
유틸리티의 \copy
명령은 psql
클라이언트를 실행하는 컴퓨터의 로컬 파일과 호환됩니다. 연결된 원격(예: Limitless Database) 서버에서 해당 COPY ... FROM STDIN
또는 COPY ... FROM STDOUT
명령을 간접 호출합니다. 로컬 파일에서 STDIN
로 데이터를 읽거나 STDOUT
에서 여기에 데이터를 씁니다.
데이터를 여러 파일로 분할
데이터는 Aurora PostgreSQL Limitless Database의 여러 샤드에 저장됩니다. \copy
를 사용하여 데이터 로드 속도를 높이려면 데이터를 여러 파일로 분할할 수 있습니다. 그런 다음 별도의 \copy
명령을 병렬로 실행하여 각 데이터 파일에 대해 독립적으로 가져옵니다.
예를 들어 가져올 행이 300만 개인 CSV 형식의 입력 데이터 파일이 있습니다. 파일을 각각 20만 개의 행을 포함하는 청크(15개의 청크)로 분할할 수 있습니다.
split -l200000 data.csv data_ --additional-suffix=.csv -d
그러면 data_00.csv
부터 data_14.csv
까지의 파일이 생성됩니다. 그런 다음, 다음과 같은 15개의 병렬 \copy
명령을 사용하여 데이터를 가져올 수 있습니다.
psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table from '/tmp/data_00.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_01.csv';" postgres_limitless & ... psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_13.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_14.csv';" postgres_limitless
이 기법을 사용하면 단일 \copy
명령을 사용하는 것보다 약 10배 더 빠르게 동일한 양의 데이터를 가져옵니다.
COPY 명령을 사용하여 Limitless Database 데이터를 파일로 복사
다음 예시와 같이 \copy
postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;