2017-06-15 213 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日)