你好,
我們有一個業務要求比較進化在某種三角洲表。
我們想比較表的最新版本使用三角洲與前一個時間旅行。
我們麵臨的主要問題是檢索以編程方式使用SQL的n - 1版本和給我們的SQL查詢它作為參數。
這個想法是這樣的:
%的sql select * from schedule@vN除了從schedule@vN-1 select *
我們知道最新的版本可以通過簡單地使用三角洲表名(它使用默認最後一個版本),但是我們如何檢索前三角洲的版本。
我們嚐試使用“hivevar”變量(如下麵),但我們因為hivevar不是評估一個錯誤。
設置hive.variable.substitute = true;設置hivevar:版本=從(描述曆史schema.my_table)選擇版本限製1;從模式選擇*。my_table版本的$ {hivevar:版本};
錯誤代碼如下:
——在SQL錯誤stateuent:拋出parseException:失蹤INTEGER_VALUE在“選擇”(第1行,pos 84)
知道如何實現這一目標嗎?
嗨@Nabil AMEZIANE,
其實你是做什麼工作……
你隻需要獲取最新版本到一個變量就像下麵
x =火花。sql(" " "選擇馬克斯(版本)(desc曆史<表名稱>)”" ").collect () [0] [0]
一定要檢查操作類型在曆史表如果有刪除操作。
現在你有一個整數x最新可用版本號。以前版本所有您需要做的就是做一個x - 1。然後你有兩個版本號。
現在通過這些變量為您的sql查詢閱讀這些版本。我將做如下
火花。sql (" "“select * from表@v {0} - select * from表@v {1}”””。格式(x, x - 1))
希望這有助於…幹杯