2017-08-03 66 views
0

存儲事務時,通常會有幾個不同的密鑰用於過濾不同用例的查詢。例如。卡ID,帳號,客戶沒有,日期針對多個密鑰的星火獸獸分區策略

該交易可以按日期進行分配爲:

jdbcDF.write.format("orc").partitionBy("TX_Date").save("transactions") 

現在我可以爲特定的幾個月迅速聚集交易,但如果我想要聚合的交易基礎在例如客戶沒有?

將事務ID存儲在每個事務行中,並保存由最常見的密鑰分區的單獨查找表(鏈接表)是否更好? 例如以下查找表:

卡ID | TransID

客戶編號| TransID

帳號| TransID

TX_Date | TransID

這是一個反模式的火花& orc開發還是有更好的方法來「索引」不同的鍵?從docs(在ORC-文件我已使用行索引)

回答

0

索引是一個數據結構,其包括每列內,用於每列的最低和最高值和行位置

ORC是一種列式文件格式,它不以SQL的方式索引。 partitionBy控制數據的位置或文件的分割方式。

通過選擇不同的partitionBy鍵確保行均勻分佈在文件中,並運行測試以確認您做了正確的選擇。

+0

partitionBy通過該鍵將數據分割到文件夾中。這意味着,如果我搜索特定的範圍或特定的按鍵,則即使沒有讀取文件夾中的orc文件,spark也會跳過所有其他按鍵。 現在的問題是,我可以通過按照建議創建查找表來實現由多個鍵分區的數據。或者更具體地說它會提高性能。 – user979899

+0

由於我在答案中寫了什麼,你可能不會得到速度提升 – raam86