你好,
我正在做一些測試與這個特性變化數據提要使用磚和Pyspark,當然三角洲格式和我不明白一些事情:
SELECT * FROM table_changes(‘表’,2);版本是2
我觀察到的行ID(例如234123)出現兩次。_change_type列我第一occurernce update_preimage,第二喘振update_postimage。
我會說這是正常的事情,因為可能出現兩次改變了ID,但是如果我檢查每個值都出現我明白了沒有變化。
這是正常嗎?
嗨@Mihai_Cog,是的,這是正常的行為。當你啟用數據提要變化特性和應用合並操作,係統記錄所有數據寫入表更改事件。這包括數據和元數據的行顯示指定的行是否插入、刪除或更新。在你的案例中,_change_type
列顯示update_preimage
和update_postimage
對於相同的ID。這意味著這個ID的行是參與一個更新操作。update_preimage
代表行更新前的狀態update_postimage
表示更新後的狀態行。即使沒有實際行中的值發生了改變在更新操作,更改數據提要功能仍然記錄作為一個更新事件。因此連續出現兩次update_preimage
和update_postimage
在_change_type
列。
來源:
(δ改變數據提要)(https://docs.www.eheci.com/delta/delta-change-data-feed.html)
(δ合並)(https://docs.www.eheci.com/delta/merge.html)
@Mihai_Cog當你發現一個條目在pre_image和post_image相同的值,這意味著確實更新記錄。但是沒有改變值。這個記錄經過merge語句,更新的列值。我們不會知道它確實改變了價值或它將更新相同的值。所有的update語句是合並,確定資格記錄更新和它對源表更新任何價值。
如果您隻希望有真正的更新,我建議在merge語句中使用一個過濾器來消除記錄相同的值的列有興趣。
@Tharun-Kumar謝謝你的回答。
更好地理解,你的意思是添加一個過濾器,意思是這樣的嗎?
.whenMatchedUpdate(設置=
{
“id”:“updates.id”,
“firstName”:“updates.firstName”,
:“middleName updates.middleName”,
“姓”:“updates.lastName”,
“性別”:“updates.gender”,
“生日”:“updates.birthDate”,
:“ssn updates.ssn”,
“工資”:“updates.salary”
}
)
把所有我感興趣的列,這樣我會得到真正的變化,我能做的我在上層的合並,隻有真正的改變?