取消
顯示的結果
而不是尋找
你的意思是:

三角洲生活表生成惟一的整數值(代理鍵)列的組合

NathanSundarara
貢獻者

你好,

我們在移動的過程從sql server數據倉庫到數據磚。我們測試過程中尺寸產品表的標識列的引用事實表為代理鍵。

磚應用變化SCD 2型我們推薦生成自申請變更不允許標識列。我試著散列()函數使用的兩列組合使用concat_ws()和傳遞concat_ws散列函數的結果。它生成大int但也產生消極的價值觀。

用戶函數像MD5、SHA1 SHA2所有生成的字符串函數。有xxhash64生成大INT不確定它還生成負數。

我的問題是任何一個知道的哈希函數將產生相同的散列數字(積極)的數量嗎?如果不是我們可能會使用SHA1,用戶或SHA2函數。我問在美國辦公時間磚的家夥建議張貼在社區論壇這裏嚐試。

6個回答6

NathanSundarara
貢獻者

XXhash_64也產生消極的價值觀,我不確定我將進入問題如果我轉換為abs和一些組合鍵它會生成正數,我可能會有重複

匿名
不適用

@Nathan Sundararajan:

當使用哈希函數在磚或任何其他的係統中,重要的是要理解,哈希函數不是專門設計產生積極或消極的數字。哈希函數的輸出通常是一個二進製字符串或數字表示,如一個整數或一個十六進製值。

如果您需要一個積極的數字表示法,一種選擇是使用xxhash64函數在磚。xxhash64是一個64位的哈希函數,可以產生積極的整數值。然而,值得注意的是,哈希函數不能保證產生獨特的對每一個輸入值,所以碰撞(即。,多個輸入產生相同的散列)可能發生的。

如果獨特性的關鍵要求是你的代理鍵,您可能要考慮使用一種不同的方法,如使用序列生成代理鍵或UUID(全局惟一標識符)。這些方法提供了獨特的每一行的值不依賴哈希函數。

另外,你提到使用SCD 2型維度表。在這種情況下,您通常會指定一個新的代理鍵一發生改變的維度。這可以通過使用一個組合的自然/業務鍵和增量序列或時間戳以確保代理鍵的唯一性和秩序。

xxhash64產生負數。

匿名
不適用

@Nathan Sundararajan:好的,我明白了,你是對的。自從XXhash64函數磚可以產生正麵和負麵的價值。確保生成的散列值是積極的,您可以應用逐位和操作的位掩碼。這裏有一個例子:

從pyspark.sql。功能導入xxhash64 df = df。withColumn (surrogate_key, xxhash64 (concat_ws (‘-’, df。col1 df.col2) & 0 x7fffffffffffffff)

請讓我知道如果這有幫助。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map