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' ;