2016-12-20 10 views
2

우리는 플랫 파일에서 포스트그레스 테이블로 데이터를로드하는 경우가 있습니다. 구분 된 파일입니다.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가 데이터를 빠르게로드하는 가장 좋은 방법이라고 가정합니다. 내가 틀렸다면 나에게 정정 해주세요.

      다른 옵션을 사용할 수 있습니까? 나에게 그것에 관해 약간의 생각을 나에게 제공해라.

  • 답변

    0

    pgloader를 확인하십시오. csv와 유사한 파일에서도 데이터를로드 할 수 있으며 "on fly"변환도 수행 할 수 있습니다. 여기에 대한 설명과 예제가 있습니다. - http://pgloader.io/howto/csv.html

    +0

    Thanks Jos. pgloader는 백그라운드에서 COPY를 사용하고있었습니다. – Raja

    +0

    pgbulkload에는 FILTER라는 옵션이 있습니다. 조작 할 수 있습니다. 그러나로드해야하는 열을 지정하는 방법은 잘 모르겠습니다. – Raja