ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 기능을 이용해봤다.

    반응형

    댓글

Designed by Tistory.