它有沒有任何可靠和有效的方式來確保impala查詢結果完全物化而不將結果打印到控制檯? 作爲例子,我將使用INNER JOIN查詢。確保Impala查詢得到實現
實現查詢結果的顯而易見的方法是將創建爲選擇。
CREATE TABLE t3 STORED AS PARQUET AS SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id;
與它的問題是,將其寫入到光盤因此是低效的。我正在尋找最有效的方式來執行查詢並確保結果具體化。
作爲示例,在Spark I中,可以使用.cache
方法,然後使用.count
以確保查詢已實現。
val t3 = t1.join(t2, "id")
t3.cache
t3.count
我可以嘗試與子查詢的解決方法。
SELECT COUNT(*) FROM (SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id) t3;
但我仍需要確保子查詢物化,這不是很明顯,如果查詢優化器發現我只是在總數感興趣。也許有一些提示強制執行這個或其他技巧?
您希望查詢具體化,但您不希望將查詢實現(即數據持久化到磁盤)。我在那裏看到一種矛盾。或者,也許你只是想對Impala守護進程進行壓力測試,只是爲了看看他們放棄OOM的哪一點? –
換句話說:Impala是一個SQL執行引擎,不是數據處理框架(*àla * Spark),不是分佈式緩存(*àla * Redis)。查詢執行完畢後,什麼也沒有。除了幾個日誌。 –
@SamsonScharfrichter感謝您的評論,在許多SQL數據庫中,您可以將查詢結果保存到變量中並進行進一步的重新使用。如果黑斑羚有這樣的功能,它會解決我的情況。我想實現查詢,但我不希望產生結果傳輸/打印開銷,所以'select count(*)'外部查詢 - 比*更好地將表創建爲select *。我不認爲這是矛盾的。只是在服務器端執行查詢的精確時間。 – jangorecki