2017-06-15 240 views
0

我有一個定義了一個有單個關係表數據源的Vora View。我在結果集中包含了兩列,其中一個列出了一個聚合函數。這個數據預覽按預期工作。如何根據聚合值過濾Vora表的查詢結果?

邏輯上,我想添加一個'where'子句來只在聚合值滿足條件時過濾數據。爲了用一個合計值來做到這一點,我的理解是我需要定義一個'HAVING'子句。所以,這是我做的,但它會導致以下異常:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 9147.0 failed 1 times, most recent failure: Lost task 0.0 in stage 9147.0 (TID 246678, localhost): sap.hanavora.jdbc.VoraException: HL(9): Runtime error. (sql_error:1:193-1:203: error: Unresolved reference SELECT "__subquery1"."CHARGE_DEPARTMENT", AVG("__subquery1"."COST") AS "AVG_COST" FROM (SELECT "HC_SERVICE"."CHARGE_DEPARTMENT", "HC_SERVICE"."COST" FROM "HC_SERVICE") AS "__subquery1" WHERE ("AVG_COST" > 500.0) GROUP BY "__subquery1"."CHARGE_DEPARTMENT" LIMIT 1000 ^^^^^^^^^^) at sap.hanavora.jdbc.driver.HLMessage.buildException(HLMessage.java:97) at ...

我已經使用SQL編輯器嘗試相同的,我也得到了同樣的異常結果,這裏是查詢:

select CHARGE_DEPARTMENT, avg(COST) as AVERAGE_COST 
from HC_SERVICE 
group by CHARGE_DEPARTMENT 
having AVERAGE_COST > 500.00; 

我也嘗試將初始查詢移動到子查詢中,然後嘗試將having子句應用於該結果集,但最終得到相同的錯誤。但是我不認爲這是必要的,因爲它出現(基於例外),在這種情況下,Vora引擎已經構建了子查詢。

+0

更新:我正在運行沃拉1.4及這個問題,於我而言,是特定的新的Vora關係引擎。我可以確認Vora內存中引擎按預期工作,可以用作創建視圖或圖表過濾器的替代方法,這些視圖或圖表過濾器利用聚合列。 – Ryan

+0

我現在正在運行1.4.20,這只是部分修復。我現在可以應用一個簡單的HAVING子句,但如果我嘗試在同一個聚合字段上添加「AND」條件,則會出現錯誤。例如,該SQL導致錯誤: 'SELECT CHARGE_DEPARTMENT,(AVG(COST))AS AVERAGE_COST 從服務中 GROUP BY CHARGE_DEPARTMENT HAVING AVERAGE_COST> 200和AVERAGE_COST <450 ORDER BY CHARGE_DEPARTMENT;' 此相同的SQL仍然適用於Vora內存引擎,但不適用於關係引擎。你能確認這是否在另一個補丁或2.0中修復? – Ryan

回答

0

您是否想在Vora Tools建模器中執行此操作?

如果你僅僅使用SQL那麼這應該給你你想要的結果:

select CHARGE_DEPARTMENT, AVERAGE_COST from (
    select CHARGE_DEPARTMENT, avg(COST) as AVERAGE_COST 
    from HC_SERVICE 
    group by CHARGE_DEPARTMENT 
    ) as subQuery 
where subQuery.AVERAGE_COST > 500.00; 
+0

是的,我正在嘗試基於此查詢構建Vora View,並且我也嘗試在Modeler中使用SubSelect。感謝您提供直接的SQL建議。但是,在嘗試該SQL時,我會得到相同的異常。 – Ryan

0

錯誤「......未解決的參考......」與HAVING是由於沃拉的錯誤。計劃在下一個Vora 1.4補丁中修復。這個問題沒有解決方法。

更新2017年7月6日:此問題是固定在沃拉1.4補丁2(可用自2017年7月3日)