우리는 플랫 파일에서 포스트그레스 테이블로 데이터를로드하는 경우가 있습니다. 구분 된 파일입니다.Postgres 제어 카드를 사용하는 대량로드
파일 내용 :
A|B|C
1.1|2016-12-20|3
는 난 단지 열 A, B & C를로드 할,하지만 테이블은 10 열이 있습니다.
오라클에서는 SQL loader를 사용하여 제어 파일을 사용하여 필요한 필드를 사용할 수 있으며 필요에 따라 조작 할 수 있습니다.
OPTIONS (DIRECT=TRUE, PARALLEL=FALSE)
LOAD DATA
INFILE FILENAME
APPEND
INTO TABLE TABLENAME
FIELDS TERMINATED BY '\t'
TRAILING NULLCOLS
(
A DECIMAL EXTERNAL,
B "to_date(:B,'YYYY-MM-DD')",
C "case when REGEXP_LIKE(:C,'^[0-9.,]') then :C else '0' end",
)
사용 COPY 명령을 우리는 SQL 로더 등 COPY 명령에서 소스 파일의 모든 조작을 사용할 수 없습니다, 여기에 열 A, B & C. 그러나 트릭 부분을로드합니다. 따라서 우리는 COPY 명령을 사용할 수 없습니다. 나는 그 선택권을 남겼다.
다른 옵션은 :
PG 벌크로드 유틸리티가 COPY보다 훨씬 더 빨랐다. CONTROL 파일을 사용할 수 있습니다. 그러나 옵션은 아래와 같이 제한됩니다.
#
# sample_csv.ctl -- Control file to load CSV input data
#
OUTPUT = table_name # [<schema_name>.]table_name
INPUT = /path/to/input_data_file.csv # Input data location (absolute path)
TYPE = CSV # Input file type
QUOTE = "\"" # Quoting character
ESCAPE = \ # Escape character for Quoting
DELIMITER = "," # Delimiter
하지만
이 있습니까
- 에 대한 옵션을 찾을 수없는 어떤 방법이다 , PG BULK LOAD를 사용하여 위의 시나리오를 수행 할 수 있습니다. 다른 소스를 찾을 수 없습니다. PGBULKLOAD가 데이터를 빠르게로드하는 가장 좋은 방법이라고 가정합니다. 내가 틀렸다면 나에게 정정 해주세요.
다른 옵션을 사용할 수 있습니까? 나에게 그것에 관해 약간의 생각을 나에게 제공해라.
Thanks Jos. pgloader는 백그라운드에서 COPY를 사용하고있었습니다. – Raja
pgbulkload에는 FILTER라는 옵션이 있습니다. 조작 할 수 있습니다. 그러나로드해야하는 열을 지정하는 방법은 잘 모르겠습니다. – Raja