Iceberg 테이블 데이터 업데이트
Iceberg 테이블 데이터는 INSERT
, UPDATE
및 DELETE
쿼리를 사용하여 Athena에서 직접 관리할 수 있습니다. 각 데이터 관리 트랜잭션은 시간 이동을 사용하여 쿼리할 수 있는 새 스냅샷을 생성합니다. UPDATE
및 DELETE
문은 Iceberg 형식 v2 행 수준 위치 삭제
다음 명령을 사용하여 Iceberg 테이블에서 데이터 관리 작업을 수행합니다.
INSERT INTO
Iceberg 테이블에 데이터를 삽입합니다. Athena Iceberg INSERT INTO
는 스캔 데이터의 양에 따라 외부 Hive 테이블에 대한 현재 INSERT INTO
쿼리와 동일한 요금이 부과됩니다. Iceberg 테이블에 데이터를 삽입하려면 다음 구문을 사용합니다. 여기서 query
는 VALUES
(val1, val2, ...)
또는 SELECT (col1, col2, …) FROM
[
일 수 있습니다. SQL 구문 및 의미 체계 세부 정보는 INSERT INTO 단원을 참조하세요.db_name
.]table_name
WHERE predicate
INSERT INTO [
db_name
.]table_name
[(col1, col2, …)]query
다음 예에서는 테이블 iceberg_table
에 값을 삽입합니다.
INSERT INTO iceberg_table VALUES (1,'a','c1')
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
INSERT INTO iceberg_table SELECT * FROM another_table
DELETE
Athena Iceberg DELETE
는 Iceberg 위치 삭제 파일을 테이블에 씁니다. 이는 읽기 중 병합(merge-on-read) 삭제라고 알려져 있습니다. 쓸 때 복사(copy-on-write) 삭제와 달리 읽기 중 병합 삭제는 파일 데이터를 다시 쓰지 않기 때문에 더 효율적입니다. Athena가 Iceberg 데이터를 읽을 때 Iceberg 위치 삭제 파일을 데이터 파일과 병합하여 테이블의 최신 뷰를 생성합니다. 이러한 위치 삭제 파일을 제거하려면 REWRITE DATA 압축 작업을 실행할 수 있습니다. DELETE
작업은 스캔 데이터의 양에 따라 요금이 부과됩니다. 구문은 DELETE 단원을 참조하세요.
다음 예에서는 iceberg_table
에서 category
값이 c3
인 행을 삭제합니다.
DELETE FROM iceberg_table WHERE category='c3'
UPDATE
Athena Iceberg UPDATE
는 Iceberg 위치 삭제 파일과 새로 업데이트된 행을 데이터 파일로 동일한 트랜잭션에 씁니다. UPDATE
는 INSERT INTO
및 DELETE
의 조합으로 가정할 수 있습니다. UPDATE
작업은 스캔 데이터의 양에 따라 요금이 부과됩니다. 구문은 UPDATE 단원을 참조하세요.
다음 예에서는 테이블 iceberg_table
에서 지정된 값을 업데이트합니다.
UPDATE iceberg_table SET category='c2' WHERE category='c1'
MERGE INTO
Iceberg 테이블에 행을 조건부로 업데이트, 삭제 또는 삽입합니다. 단일 명령문으로 업데이트, 삭제 및 삽입 작업을 결합할 수 있습니다. 구문은 MERGE INTO 단원을 참조하세요.
참고
MERGE INTO
은 트랜잭션이며 Athena 엔진 버전 3의 Apache Iceberg 테이블에 대해서만 지원됩니다.
다음 예에서는 s
소스 테이블에 있는 t
테이블에서 모든 고객을 삭제합니다.
MERGE INTO accounts t USING monthly_accounts_update s ON t.customer = s.customer WHEN MATCHED THEN DELETE
다음 예에서는 s
소스 테이블의 고객 정보로 t
대상 테이블을 업데이트합니다. s
테이블에 t
테이블의 고객 행과 일치하는 항목이 있는 경우 이 예에서는 테이블 t의 구매 수를 늘립니다. t
테이블에 s
테이블의 고객 행과 일치하는 항목이 없는 경우 이 예에서는 s
테이블의 고객 행을 t
테이블에 삽입합니다.
MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)
다음 예에서는 s
소스 테이블의 고객 정보로 t
대상 테이블을 조건부로 업데이트합니다. 이 예에서는 소스 주소가 Centreville인 일치하는 대상 행을 모두 삭제합니다. 모든 다른 일치하는 행의 경우 이 예에서는 소스 구매를 추가하고 대상 주소를 소스 주소로 설정합니다. 대상 테이블에 일치하는 항목이 없는 경우 이 예에서는 소스 테이블의 행을 삽입합니다.
MERGE INTO accounts t USING monthly_accounts_update s ON (t.customer = s.customer) WHEN MATCHED AND s.address = 'Centreville' THEN DELETE WHEN MATCHED THEN UPDATE SET purchases = s.purchases + t.purchases, address = s.address WHEN NOT MATCHED THEN INSERT (customer, purchases, address) VALUES(s.customer, s.purchases, s.address)