![](https://blog.kakaocdn.net/dn/KZzX8/btsDhhiB0zK/ARK9pohaI1g7XYvXXkadkK/img.png)
INSERT (병렬처리x, master 거침)
- 일반적인 db 에서 지원되는 insert 문
- 적은 수의 row를 진행할 경우 사용
- INSERT INTO <table> SELECT FROM <external table>
![](https://blog.kakaocdn.net/dn/RyIjt/btsDhjHwaLG/fCjon8wK50gj1KzzPDs7Ok/img.png)
COPY (병렬처리x, master 거침)
- postgreSQL 명령어로, 명령어 1번으로 모든 row 를 load 함.
- file 이나 standard input에서 table로 데이터를 넣을 때 사용
![](https://blog.kakaocdn.net/dn/bTxzJC/btsDaxNo89x/s9Nq1HPBKET3zGJ2yLu4rK/img.png)
COPY
- 모든 데이터는 Master 를 통해 load 됨
- Master 를 거쳐 처리되기 때문에 한꺼번에 대량의 데이터를 다루기엔 어려울 수 있음 (병렬처리x)
COPY mytable FROM '/data/myfile.csv ’ WITH CSV HEADER;
COPY 'select * from mytable TO '/data/my_output_file';
- Syntax
- REJECT LIMIT ~ ROWS : 각 segment 별로 ~건 이상 오류가 발생할 경우 rollback
![](https://blog.kakaocdn.net/dn/bFEJkk/btsDbgygCMg/z5xX7BnZGsPvRRLLhRwfs0/img.png)
- Error 발생
- db 의 시스템 로그에 들어가며, 누적되어 쌓이므로 별도로 관리해주어야 함
![](https://blog.kakaocdn.net/dn/bz4reP/btsDhjALTmV/4JuXrRTMqBkbbJXqTuUJt1/img.png)
- gpfdist : 파일을 병렬처리하기 위한 process
- gpload : gpfdist 와 external table을 활용하여 I/F
external table 은 로컬 테이블처럼 보여지며, 해당 테이블을 gpload 를 통해 데이터를 가져옴
gpload 실행 시 gpfdist 띄우고 external 생성/삭제 등 일련의 과정들을 내부적으로 실행해줌
![](https://blog.kakaocdn.net/dn/b1Y4l5/btsC84d3yeu/Gk3YrMyFlJqItPzVAes8KK/img.png)
External Table 상세 설명
![](https://blog.kakaocdn.net/dn/MpXPX/btsDhOgbDMN/bBUOn4eKfUhFaPhvkX3xCk/img.png)
1) file
- 파일을 직접적으로 연결하여 external table 생성
![](https://blog.kakaocdn.net/dn/b1Yb7A/btsDd1HBhGF/hVIsV5rFduElvpE5twvabk/img.png)
2) gpfdist
- gpfdist agent를 통하여 connection을 열어주고, 해당 connection 을 통해 external table 생성
- gpfdist 가 mdw를 통하지 않고 각각 sdw와 직접 통신함.
- 이 때, 들어오는 데이터가 분산키에 맞지 않다면 각 sdw 가 mdw 처럼 다른 sdw 로 보내주는 역할도 진행.
![](https://blog.kakaocdn.net/dn/ogBG3/btsDfmYNq5M/gEHzL8i9Cof3A5wATF8Ot0/img.png)
3) Web Table Protocol
- sh 파일 실행의 경우 superuser 로서 모두 실행 가능한 상태여야 함
![](https://blog.kakaocdn.net/dn/mgzVJ/btsDd5iZx8Y/HBMS9XeLr4oUvXGwnbC5bk/img.png)
![](https://blog.kakaocdn.net/dn/caPThs/btsDfk7Y3iU/Eh09xu7hU2Y04iuvuvUKh0/img.png)
![](https://blog.kakaocdn.net/dn/vF74w/btsDfWewsN4/aYPCIR8Q76RK6saZ9rSZl1/img.png)
- Error 발생
![](https://blog.kakaocdn.net/dn/q5IDn/btsDiPFFQj8/xwVQsZG2rqBOUFRojQfxj1/img.png)
gpload
- gpload 사용을 위해 yaml 파일 정의가 필요
- gpu, memory, network 리소스 여유가 있다면 여러개 gpload 동시 수행 가능
- 많은 양의 데이터를 load 하는 경우, 진행 전 index는 drop, 진행 후 vacuum/analyze 작업 진행 권장.
- 명령어
![](https://blog.kakaocdn.net/dn/cP4iGL/btsC85jLZZT/vXWDzKROogsS3SUsqVj5L0/img.png)
명령어 예시)
gpload f <YAML conf file>
gpload d vpdb h 172.28.12.250 p 5432 f conf gpload_orders.conf l log/ gpload_orders.log
- yaml file 예시)
![](https://blog.kakaocdn.net/dn/dO5CuQ/btsC9ARiKG4/TMU34reHqRRFugAJDGkOP1/img.png)
![](https://blog.kakaocdn.net/dn/c7HlgO/btsC9y63alw/EDAHlzo71pyKemi4ckivlK/img.png)
![](https://blog.kakaocdn.net/dn/bczvVG/btsDfXdqQfE/zrguVK46TER5H3xmNoPODk/img.png)
PXF
- Hadoop 연동하여 data load 하게끔 하는 I/F
![](https://blog.kakaocdn.net/dn/XpGAh/btsDfVGHg9K/i9kTZINRDRFm1fA3enjc5k/img.png)
- Profile 예시
![](https://blog.kakaocdn.net/dn/ciAQZC/btsC9lNbWve/ri5Nim4m15FAGAcXZEvOJk/img.png)
![](https://blog.kakaocdn.net/dn/MaJvn/btsDhLKyzHY/tFubJA6osQHtwTKc0NQeGk/img.png)
실습
1) copy
-- copy 를 이용하여 d_airlines 테이블에 데이터 로드
COPY training.d_airlines
FROM '/home/gpadmin/data/L_AIRLINE_ID.csv'
csv
log errors
segment reject limit 50 rows;
-- 에러 로그 확인
SELECT * FROM gp_read_error_log('training.d_airlines');
-- 에러 로그 삭제
SELECT gp_truncate_error_log ('training.d_airlines');
-- copy 구문 수정하여 데이터 다시 로드
TRUNCATE TABLE training.d_airlines ;
COPY training.d_airlines
FROM '/home/gpadmin/data/L_AIRLINE_ID.csv'
Csv header
log errors
segment reject limit 50 rows;
2) gpfdist
--server에서 gpfdist process 올려놓기
gpfdist -d /home/gpadmin/data -p 8080 >> gpfdist.log 2>&1 &
--db external table 생성 후 insert
CREATE EXTERNAL TABLE training.ext_f_otp_load
(LIKE training.f_otp_load)
LOCATION ('gpfdist://mdw:8080/otp*.gz')
FORMAT 'csv' (header) LOG ERRORS SEGMENT REJECT LIMIT 50000 rows;
--INSERT INTO training.f_otp_load
SELECT * FROM training.ext_f_otp_load;
--오류 확인
SELECT DISTINCT relname, errmsg, count(*)
FROM gp_read_error_log('training.ext_f_otp_load')
GROUP BY 1, 2;
--오류 데이터행만 별도 파일로 저장
SELECT rawdata FROM gp_read_error_log('training.ext_f_otp_load');
COPY (SELECT rawdata FROM gp_read_error_log('training.ext_f_otp_load'))
TO '/home/gpadmin/data/f_otp_load.bad' ;
3) gpload
--gpload.yaml 파일 설정 (맨 밑 REUSE_TABLES=TRUE, FALSE 둘다 실행해봄)
![](https://blog.kakaocdn.net/dn/biBGdj/btsDiwe5Bjr/zuKv20YBjupkJeO19hFqvK/img.png)
--SERVER에서 GPLOAD 실행
gpload -d testdb -f gpload.yaml
![](https://blog.kakaocdn.net/dn/s5v9c/btsDayetJmy/XCr7BKhqDi9Fl3vLM2l351/img.png)
![](https://blog.kakaocdn.net/dn/YB1HO/btsDiuBzlrI/YeKgBIzsz3bXa1btuBeJ00/img.png)
Quiz
![](https://blog.kakaocdn.net/dn/AraVF/btsDfivzGDZ/rLON5iWg4EGNdKdVi9uKq0/img.png)
2, 4, 5
'프로N잡러 > 프로그래밍&자격증' 카테고리의 다른 글
[GPDB] 8. Functions (2) | 2024.01.09 |
---|---|
[GPDB] 7. Data Manipulation Language(DML) (0) | 2024.01.09 |
[SQLD] 자격증 정보 & 기출문제 웹사이트 (0) | 2024.01.09 |
[SQLP] 기출문제 웹사이트 (0) | 2024.01.09 |
[GPDB] 5. Storage Optimization (0) | 2024.01.09 |