-
Spark + Iceberg - 4(Time Travel)Data Engineering 2024. 1. 18. 21:20반응형
소개
아이스버그 기능인 Time Travel기능에 대해서 살펴보자.
데이터를 Create or Delete 시 Snapshot이 만들어지는데 이것을 이용해 과거 데이터로 롤백할 수 있다.
Partition이 변경되는 부분은 기록이 안되는 것 같다.
간단한 기능 실습을 해보자.
실습
1. CREAT TABLE
create table time_travel ( ID BIGINT, NAME STRING ) USING ICEBERG LOCATION 's3a://martinispark/timetravel'
2. INSERT INTO Data
INSERT INTO time_travel VALUES (1,'martini'), (2,'kebin'), (3,'jack')
3. INSERT INTO Data
INSERT INTO time_travel VALUES (4,'dayoung'), (5,'elly')
4. Data 조회
5. DELETE Data
DELETE FROM time_travel WHERE id=3
6. Data 조회
7. SNAPSHOT 조회
SNAPSHOT 조회 시 Catalog 이름을 붙여줘야 에러가 발생하지 않는다.
SELECT * FROM default.time_travel.snapshots;
Table Column 정보는 아래와 같다.
* 언제 커밋했는지
* snapshot 및 부모 snapshot이 누군지
* 어떤 Operation을 했는지
* Data 파일이 뭔지
commited_at snapshot_id parent_id operation manifest_list summary 2024-01-18 20:58:10.210000000 8940556835085920119 null append s3a://martinispark/timetravel/metadata/snap-8940556835085920119-1-20c3d100-78c0-4666-8344-d28059829f2c.avro {"added-data-files":"3","added-files-size":"1970","added-records":"3","changed-partition-count":"1","spark.app.id":"local-1705578282576","total-data-files":"3","total-delete-files":"0","total-equality-deletes":"0","total-files-size":"1970","total-position-deletes":"0","total-records":"3"} 2024-01-18 20:59:44.562000000 1996225637494114706 8940556835085920119 append s3a://martinispark/timetravel/metadata/snap-1996225637494114706-1-8aef7b55-a7ff-4cb2-a918-c5f6e2498cd0.avro {"added-data-files":"2","added-files-size":"1316","added-records":"2","changed-partition-count":"1","spark.app.id":"local-1705578282576","total-data-files":"5","total-delete-files":"0","total-equality-deletes":"0","total-files-size":"3286","total-position-deletes":"0","total-records":"5"} 2024-01-18 21:06:26.198000000 5598258952097923005 1996225637494114706 delete s3a://martinispark/timetravel/metadata/snap-5598258952097923005-1-4f188e74-30c7-46ec-80d2-a641be6421e7.avro {"changed-partition-count":"1","deleted-data-files":"1","deleted-records":"1","removed-files-size":"647","spark.app.id":"local-1705578282576","total-data-files":"4","total-delete-files":"0","total-equality-deletes":"0","total-files-size":"2639","total-position-deletes":"0","total-records":"4"} 8. Time Travel 기능 이용
Spark3.3.0 이상부터 지원한다. 2가지 SQL로 이용할 수 있다.
SELECT * FROM T FOR SYSTEM_TIME AS OF <TIMESTAMP>; SELECT * FROM t FOR SYSTEM_VERSION AS OF <SNAPSHOT_ID>;
첫 번째 Snapshot을 보자
SELECT * FROM time_travel FOR SYSTEM_VERSION AS OF 8940556835085920119;
두 번째는 TIMESTAMP를 이용해보자.
SELECT * FROM time_travel FOR SYSTEM_TIME AS OF '2024-01-18 20:59:44.562000000';
이렇게 Iceberg Table의 Time Travel 기능을 이용해봤다.
반응형'Data Engineering' 카테고리의 다른 글
Databricks certified data engineer associate 취득 후기(2024.08) (0) 2024.08.10 Spark + Iceberg - 5(Merge on read vs Copy on write) (0) 2024.01.21 Spark + Iceberg - 3(Hidden Partitioning) (0) 2024.01.17 Spark + Iceberg - 2(Partition, Schema evolution) (0) 2024.01.16 Spark + Iceberg - 1(소개 및 연동) (0) 2024.01.16