Step 1: 배열 데이터를 포함한 GPDB 테이블 생성
먼저 배열 데이터를 포함한 테이블을 생성
CREATE TABLE test (
id INT,
values INT[]
);
-- 임시로 데이터를 배열 형태로 변환하여 삽입
INSERT INTO test (id, values)
SELECT id, array_agg(value_column) -- 필요한 컬럼들을 array_agg로 배열 형태로 변환
FROM (
SELECT id, value_column,
ROW_NUMBER() OVER (PARTITION BY id) as rn -- 데이터베이스와 테이블 구조에 맞춰 조정
FROM test_table
ORDER BY id
LIMIT 10
) subquery
GROUP BY id;
Step 2: 외부 테이블 생성 (HDFS에 쓰기용)
배열 데이터를 HDFS에 저장하기 위한 외부 테이블을 생성. 데이터를 텍스트 형식으로 변환하지 않고 그대로 저장
CREATE WRITABLE EXTERNAL TABLE hdfs_test_data (
id INT,
values INT[]
)
LOCATION ('pxf://namenode:8020/path/to/hdfs/test_data?PROFILE=HdfsTextSimple')
FORMAT 'CUSTOM' (
formatter='pxfwritable_import'
);
- namenode: HDFS 네임노드의 호스트 이름. 예를 들어 hdfs-namenode.example.com 일 수 있다.
- 8020: HDFS 네임노드가 사용하는 기본 포트 번호.
- /path/to/hdfs/test_data: HDFS 내의 데이터 파일이나 디렉토리 경로. 예를 들어 /user/greenplum/test_data
- PROFILE=hdfs: HDFS와 상호작용하기 위한 PXF 프로파일
또는 텍스트 형식으로 저장
CREATE WRITABLE EXTERNAL TABLE hdfs_test_data (
id INT,
values TEXT
)
LOCATION ('pxf://namenode:8020/path/to/hdfs/test_data?PROFILE=hdfs')
FORMAT 'TEXT' (DELIMITER ',');
Step 3: 배열 데이터를 HDFS에 저장
배열 데이터를 HDFS 외부 테이블에 삽입
INSERT INTO hdfs_test_data
SELECT id, values
FROM test
LIMIT 10; -- 10개의 데이터만 가져옵니다.
또는 GPDB에 있는 배열 데이터를 텍스트 형식으로 변환하여 HDFS 외부 테이블에 삽입
INSERT INTO hdfs_test_data
SELECT id, array_to_string(values, ',')
FROM test;
HDFS에서 데이터를 다시 GPDB로 로드하기
Step 1: 외부 테이블 생성 (읽기용)
HDFS에 저장된 데이터를 읽기 위한 외부 테이블을 생성
CREATE EXTERNAL TABLE hdfs_test_data_read (
id INT,
values INT[]
)
LOCATION ('pxf://namenode:8020/path/to/hdfs/test_data?PROFILE=HdfsTextSimple')
FORMAT 'CUSTOM' (
formatter='pxfwritable_export'
);
데이터가 텍스트 형태일 경우
CREATE EXTERNAL TABLE hdfs_test_data_read (
id INT,
values TEXT
)
LOCATION ('pxf://namenode:8020/path/to/hdfs/test_data?PROFILE=hdfs')
FORMAT 'TEXT' (DELIMITER ',');
Step 2: 배열 데이터를 포함한 GPDB 테이블 생성
HDFS에서 로드할 배열 데이터를 포함한 테이블을 생성
CREATE TABLE array_data_loaded (
id INT,
values INT[]
);
Step 3: 데이터 로드
HDFS 외부 테이블에서 GPDB 테이블에 삽입
INSERT INTO test2
SELECT id, values
FROM hdfs_test_data_read;
데이터가 텍스트 형태일 경우 HDFS 외부 테이블에서 데이터를 읽어와 배열로 변환한 후 GPDB 테이블에 삽입
INSERT INTO test2
SELECT id, string_to_array(values, ',')::INT[]
FROM hdfs_test_data_read;반응형
'DB > PostgreSQL' 카테고리의 다른 글
| 수동으로 데이터 재분배 (0) | 2024.08.06 |
|---|---|
| CPU Skew (1) | 2024.08.06 |
| Greenplum PXF (0) | 2024.08.05 |
| MPP (Massively Parallel Processing) 시스템 (0) | 2024.08.04 |
| 쿼리 튜닝 - 쿼리 튜닝 예시 (0) | 2024.08.04 |