交易語意 - Amazon Redshift

Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

交易語意

Redshift Iceberg 寫入查詢支援 ACID 和快照隔離。寫入交易具有保證的原子性,且在查詢意外失敗時不會產生部分更新。

多個 Iceberg 交易可以同時執行,如果兩個交易嘗試同時修改相同的資料表或分割區,則交易遞交會失敗。這可確保資料完整性。發生這種情況時,您必須手動解決衝突,並重新執行失敗的查詢。Amazon Redshift 不會自動重試並解決衝突。

單一 Iceberg 寫入查詢一律視為單一自動遞交交易。當明確交易區塊中包含 CREATE 或 INSERT 查詢等 Iceberg 寫入查詢時,無法在相同的交易區塊中執行其他查詢。交易將會失敗。

下列是一些範例。第一個範例示範單一陳述式查詢一律會在查詢完成後自動遞交。在此案例中,您要建立新的銷售訂單表格:

CREATE TABLE sales_schema.orders ( order_id int, customer_id int, order_date date, total_amount decimal(10,2) ) USING ICEBERG LOCATION 's3://my-data-lake/sales/orders/';

此範例是明確的交易區塊,用於使用 S3 資料表儲存貯體的三部分表示法插入客戶訂單。INSERT 查詢之後,交易不會自動遞交,而是使用 COMMIT 命令遞交和插入訂單資料:

BEGIN; INSERT INTO "analytics_bucket@s3tablescatalog".sales_db.orders VALUES (12345, 9876, '2024-10-30', 299.99); COMMIT;

此範例是明確的交易區塊復原案例,您可以在其中測試訂單插入,但決定將其取消。在 INSERT 查詢之後,交易不會自動遞交,而是使用 ROLLBACK 命令復原,而不插入測試順序。

BEGIN; INSERT INTO sales_schema.orders VALUES (12346, 5432, '2024-10-30', 150.75); ROLLBACK;

此最終範例示範當您嘗試在與 INSERT 查詢相同的交易區塊中執行另一個陳述式時,交易會如何在不插入訂單資料的情況下失敗。在此案例中,您嘗試插入訂單並立即查詢資料表:

BEGIN; INSERT INTO sales_schema.orders VALUES (12347, 7890, '2024-10-30', 425.50); SELECT * FROM sales_schema.orders WHERE order_id = 12347;

唯一的例外是 DROP TABLE陳述式,其一律做為自動遞交陳述式,無法在明確的交易區塊內執行。這是為了在外部資料表DROP TABLE上維持與 相同的行為。如需詳細資訊,請參閱 DROP TABLE

注意

Iceberg 寫入 SQLs無法從預存程序內執行。