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

設置版本(版本的)從返回的動態子查詢

nameziane
新的貢獻者三世

你好,

我們有一個業務要求比較進化在某種三角洲表。

我們想比較表的最新版本使用三角洲與前一個時間旅行。

我們麵臨的主要問題是檢索以編程方式使用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)

知道如何實現這一目標嗎?

4回複4

UmaMahesh1
尊敬的貢獻者三世

嗨@Nabil AMEZIANE,

其實你是做什麼工作……

你隻需要獲取最新版本到一個變量就像下麵

x =火花。sql(" " "選擇馬克斯(版本)(desc曆史<表名稱>)”" ").collect () [0] [0]

一定要檢查操作類型在曆史表如果有刪除操作。

現在你有一個整數x最新可用版本號。以前版本所有您需要做的就是做一個x - 1。然後你有兩個版本號。

現在通過這些變量為您的sql查詢閱讀這些版本。我將做如下

火花。sql (" "“select * from表@v {0} - select * from表@v {1}”””。格式(x, x - 1))

希望這有助於…幹杯

nameziane
新的貢獻者三世

@Uma Maheswara Rao Desula謝謝你的快速回答,但我有限製隻能使用sql格式(我不能使用scala /火花或pyspark代碼)

apingle
貢獻者

文檔它說,“無論是timestamp_expression還是版本可以子查詢”。

這聽起來確實有挑戰性。我也試過玩小部件是否可以填充使用SQL,但沒有成功。與python很容易做到。

nameziane
新的貢獻者三世

是的,完全簡單的代碼很容易做,但當時不可能隻有SQL(我試著使用蜂巢/火花變量結果是同樣的事情,因為變量不執行)我認為我們需要類似“蜂巢cmd”磚做收集的第一部分的第一個查詢的結果變量然後把它應用到第二個查詢但我們必須使用殼牌和它不是目的)

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

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

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

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

Baidu
map