지난 시간에 테이블을 만들고 변경하는 DDL 쿼리문에 대해서 살펴보았다. 만약 아직 내용을 보지 못했다면 아래 페이지를 참고하도록 하자. 이번에는 실제 테이블 데이터를 사용하기 위한 DML 쿼리문과 메타데이터 활용법에 대해서 알아볼 예정이다.
[참고 - Iceberg DDL쿼리문]
2023.10.13 - [[기술공부]/Data] - Apache Iceberg DDL 쿼리 사용법 - Create and Alter Table
Apache Iceberg DDL 쿼리 사용법 - Create and Alter Table
이번에는 Iceberg 테이블 포맷에서의 테이블을 만들고 변경하는 DDL 쿼리 구문에 대해 알아보도록 하자. 참고로 나는 Spark에서 Iceberg 테이블을 사용하는 기준으로 쿼리를 정리했으므로, Spark가 아닌
developers-haven.tistory.com
<Table DML(Data Manipulation Language)>
테이블의 실제 데이터 레코드를 조회, 수정, 삭제 등의 작업을 할때 사용하는 명령어이다.
# Insert
테이블에 데이터를 삽입(=적재)할 때 사용하는 명령문이다.
-- case1 (참고로 Iceberg는 전체 컬럼을 모두 명시해줘야 한다.)
INSERT INTO TABLE [스키마].[테이블명] (col1, col2) VALUES (value1, value2)
-- case2
INSERT [INTO/OVERWRITE] TABLE [타겟스키마].[타겟테이블명] -- 타겟은 적재를 하고자 하는 대상 테이블을 의미
SELECT
col1,
col2
FROM [소스스키마].[소스테이블명] -- 소스는 타겟 테이블에 넣을 데이터가 있는 테이블을 의미
WHERE 'col1' = 'value1' ... -- 원하는 조건만 적재하려면 WHERE 조건문을 사용하고, 전체를 가져오려면 WHERE절을 생략한다.
# Select
1. 테이블 정보 조회
SHOW DATABASES; -- 데이터베이스의 스키마 리스트 확인
SHOW TABLES; -- 현재 스키마에 존재하는 테이블 리스트 확인
DESCRIBE TABLE [스키마].[테이블명]; -- 해당 테이블구조 확인(컬럼,데이터타입 등)
SHOW CREATE TABLE [스키마].[테이블명]; -- 해당 테이블 DDL문 확인
2. 테이블 조회
-- case1.테이블의 전체 컬럼 데이터 확인
SELECT *
FROM [스키마].[테이블명]
WHERE 'col1' = 'value1' ... -- 원하는 조건만 확인하려면 WHERE 조건문을 사용하고, 전체를 가져오려면 WHERE절을 생략한다.
-- case2.테이블의 특정 컬럼 데이터만 확인
-- SELECT문에 확인하고자 하는 컬럼명을 명시해준다.
SELECT col1,
col2
FROM [스키마].[테이블명]
WHERE 'col1' = 'value1' ... -- 원하는 조건만 확인하려면 WHERE 조건문을 사용하고, 전체를 가져오려면 WHERE절을 생략한다.
(참고) SELECT 기본 함수
아래 외에도 다양한 함수가 있으므로, 외우는 것보다 상황에 필요한 함수를 검색해서 찾아보길 추천한다.
함수 | 사용법 |
UPPER(column), LOWER(column) | 문자열을 대문자, 소문자로 출력해준다. |
SUBSTRING(column, N, M) | 문자열을 N번째 문자를 기준으로 M개의 문자를 출력해준다. |
LENGTH(column) | 문자열의 길이를 반환해준다. |
CAST(column as TYPE) | column 데이터 타입을 변경해준다. (ex. CAST(column as date)) |
ABS(column) | column의 절대값을 반환해준다. |
3. 메타데이터 테이블 조회
Iceberg는 스키마, 파티션, 스냅샷 등에 대한 전체 정보를 메타데이터(metadata)에서 관리한다. 메타데이터는 테이블 처럼 관리되어서 SELECT 구문을 활용해서 메타 정보를 확인할 수 있다. 만약, 메타데이터에 대한 내용을 모르겠다면 아래 페이지를 참고하도록 하자.
2023.10.11 - [[기술공부]/Data] - Apache Iceberg란 무엇일까?
Apache Iceberg란 무엇일까?
현재 빅데이터 솔루션 기업에서 Data Architect로 근무하면서, 새로운 기술이 우리 회사의 솔루션에 적용될때마다 자연스레 많은 기술 공부의 기회를 얻고 있다. 작년에 진행한 프로젝트에서 Iceberg
developers-haven.tistory.com
(1) 테이블 파티션 조회
-- case1.테이블 파티션 조회 (Iceberg에서는 Hive의 show partitions 명령을 지원하지 않는다.)
SELECT * FROM [스키마].[테이블명].partitions; -- '.partitions'에 대한 대소문자는 상관 없음
-- case2.테이블 전체 데이터 건수 조회
SELECT SUM(record_count) FROM [스키마].[테이블명].partitions;
-- case3.테이블 파티션별 데이터 건수 조회(파티션을 etl_ymd라고 가정)
SELECT partition.etl_ymd, record_count FROM [스키마].[테이블명].partitions;
(2) 파일, 스냅샷, 메타데이터 조회
-- 테이블 데이터의 파일 정보 조회
SELECT * FROM [스키마].[테이블명].files;
-- 테이블 데이터의 전체 파일 사이즈 조회
SELECT SUM(file_size_in_bytes) FROM [스키마].[테이블명].files;
-- 테이블 변경기록 조회(시점별 스냅샷 확인 가능)
SELECT * FROM [스키마].[테이블명].history;
-- 테이블 스냅샷 조회(시점별 스냅샷에 대한 manifest list 확인 가능)
SELECT * FROM [스키마].[테이블명].snapshots;
-- 테이블의 모든 데이터 파일과 각 파일의 메타데이터 조회
SELECT * FROM [스키마].[테이블명].all_data_files;
# Update
원하는 조건에 따라 row(행) 단위의 데이터 업데이트가 가능하다.
-- Iceberg는 Update 명령 지원
UPDATE [스키마].[테이블명]
SET col1 = value1, -- 수정하고자 하는 '컬럼'='값'
col2 = value2
WHERE ... -- 수정하고자 하는 데이터 조건 지정
# Delete
Iceberg는 원하는 조건에 맞는 row(행) 단위의 삭제가 가능하다. 만약 삭제하고자 하는 row가 테이블의 일부라면 삭제와 관련된 데이터 파일을 rewrite 하게 된다.
-- Iceberg는 Delete 명령 지원
DELETE FROM [스키마].[테이블명] WHERE ... ; -- WHERE절에 삭제하고자 하는 조건을 지정해준다.
두번에 걸쳐 Spark에서 Iceberg 테이블을 사용하는 DDL, DML 쿼리문에 대해서 배워보았다. 그리고 Iceberg의 가장 큰 특징은 메타데이터를 파일로 관리하는 것인데, SELECT 문을 활용해서 메타데이터를 확인하는 것까지 알아보았다. 업무를 하다보면 테이블별 데이터 건수, 파티션, 용량 정보를 확인하는 과정이 필요한데 Iceberg는 메타데이터로 이를 쉽게 확인할 수 있게 해주어서 편리함을 많이 느낄 수 있었다. 이 내용이 Iceberg를 사용하는 사람들에게 많은 도움이 되었으면 좋겠다.
참고 사이트(Iceberg 공식 문서) - https://iceberg.apache.org/docs/latest/spark-ddl/
'[기술공부] > Data' 카테고리의 다른 글
Apache Iceberg vs Apache Hive 차이점 - (1) (1) | 2023.11.03 |
---|---|
Apache Iceberg : Copy-on-Write(cow) vs Merge-on-Read(mor) (0) | 2023.10.30 |
SQL튜닝 - 인덱스의 종류에 대하여 (클러스터/비클러스터 인덱스) (0) | 2023.10.27 |
SQL 튜닝 - 인덱스에 대하여 (2) | 2023.10.27 |
Apache Iceberg DDL 쿼리 사용법 - Create and Alter Table (0) | 2023.10.13 |