Iceberg 테이블 데이터 업데이트 - Amazon Athena

Iceberg 테이블 데이터 업데이트

Iceberg 테이블 데이터는 INSERT, UPDATEDELETE 쿼리를 사용하여 Athena에서 직접 관리할 수 있습니다. 각 데이터 관리 트랜잭션은 시간 이동을 사용하여 쿼리할 수 있는 새 스냅샷을 생성합니다. UPDATEDELETE 문은 Iceberg 형식 v2 행 수준 위치 삭제 사양 및 스냅샷 격리 적용을 따릅니다.

다음 명령을 사용하여 Iceberg 테이블에서 데이터 관리 작업을 수행합니다.

INSERT INTO

Iceberg 테이블에 데이터를 삽입합니다. Athena Iceberg INSERT INTO는 스캔 데이터의 양에 따라 외부 Hive 테이블에 대한 현재 INSERT INTO 쿼리와 동일한 요금이 부과됩니다. Iceberg 테이블에 데이터를 삽입하려면 다음 구문을 사용합니다. 여기서 queryVALUES (val1, val2, ...) 또는 SELECT (col1, col2, …) FROM [db_name.]table_name WHERE predicate일 수 있습니다. SQL 구문 및 의미 체계 세부 정보는 INSERT INTO 단원을 참조하세요.

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 위치 삭제 파일과 새로 업데이트된 행을 데이터 파일로 동일한 트랜잭션에 씁니다. UPDATEINSERT INTODELETE의 조합으로 가정할 수 있습니다. 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)