hotamul의 개발 이야기

[GPDB] Exteranl Table/COPY error 확인 방법 본문

Dev./Greenplum DB

[GPDB] Exteranl Table/COPY error 확인 방법

hotamul 2022. 12. 15. 12:37

아래와 같은 External Table을 define 하거나 COPY operation을 실행할 때 발생한 에러를 확인하려면 gp_read_error_log 함수를 이용해 table 형태로 에러가 발생한 각각의 row에 대해 확인할 수 있어요. (Viewing Bad Rows in the Error Log)

-- create external table example
CREATE EXTERNAL TABLE ext_expenses ( name text, 
date date,  amount float4, category text, desc1 text ) 
LOCATION ('gpfdist://etlhost-1:8081/*', 
          'gpfdist://etlhost-2:8082/*')
FORMAT 'TEXT' (DELIMITER '|')
LOG ERRORS SEGMENT REJECT LIMIT 10
    ROWS;

SEGMENT REJECT LIMIT 10은 전체 에러가 10개가 아닌 모든 greenplum segment instance가 10개 이상의 에러가 발생하면 실행하면 reject 된다는 의미에요. gpfdist는 greenplum의 병렬 ETL utility에요. gpfdist를 이용하면 greenplum의 아키텍처적인 장점을 이용해서 대용량 데이터 ETL을 빠르게 처리할 수 있어요👍!

-- use build-in sql function to read the error log data
SELECT gp_read_error_log('ext_expenses')
-- copy example
COPY country FROM '/data/gpdb/country_data' 
WITH DELIMITER '|' LOG ERRORS
SEGMENT REJECT LIMIT 10 ROWS;
-- use build-in sql function to read the error log data
SELECT gp_read_error_log('country')

해당 에러를 삭제하려면 gp_truncate_error_log를 사용하면 되요!

-- use build-in sql function to delete the error log data
SELECT gp_truncate_error_log('ext_expenses');
SELECT gp_truncate_error_log('country');

아래와 같이 실패한 항목들의 rawdata도 확인해서 따로 파일로 저장해둘 수 있어요!

COPY (SELECT rawdata FROM gp_read_error_log('ext_expenses'))
TO '/home/gpadmin/data/f_otp_load.bad' ;
Comments