DB/PostgreSQL

GPDB -> HDFS -> GPDB 로드

박쿠리 2024. 8. 5. 22:37

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