表的隔離級別定義了必須將某事務與并發事務所做的修改隔離的程度。Databricks上的Delta Lake支持兩種隔離級別:Serializable和WriteSerializable。
說明
詳細內容可參考Databricks官網文章:隔離等級
Serializable:最強的隔離級別。它確保提交的寫入操作和所有讀取都是可序列化。 只要有一個串行序列一次執行一項操作,且生成與表中所示相同的結果,則可執行這些操作。對于寫操作,串行序列與表歷史記錄中的序列完全相同。
WriteSerializable(默認):隔離級別比Serializable低。它僅確保寫入操作(而非讀取)是可序列化的。但是,這仍然比快照隔離更安全。WriteSerializable是默認的隔離級別,因為對大多數常見操作而言,它使數據一致性和可用性之間達到良好的平衡。
在此模式下,Delta 表的內容可能與表歷史記錄中所示的操作序列不同。這是因為此模式允許某些并發寫入對繼續進行(例如,操作X和Y),即使歷史記錄顯示Y是在X之后提交的,但結果是Y在X之前執行的(也就是說,它們之間可序列化)。要禁止這種重新排序,請將表隔離級別設置為Serializable,以使這些事務失敗。
設置隔離級別
可以使用ALTER TABLE命令設置隔離級別。
SQL
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = <level-name>)
其中<level name>是Serializable或WriteSerializable。
例如,要將隔離級別從默認WriteSerializable更改為Serializable,請運行:
SQL
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')
文檔內容是否對您有幫助?