2

需要有关 apache 方解石的建议。我们在 Teradata 上运行了一些 SQL 查询。现在我们想在 Hadoop/Spark 上运行这些 sql 查询(原样),也许使用 Apache calcite。

我们在 Spark SQL (2.6.3) 和 Apache calcite 中尝试了这些 SQL 查询(原样) - 但很少有查询不运行。问题是如果我们定义一个派生变量 (AS) 并尝试在同一级别的同一查询中使用它,它在 SparkSQL 和 calcite 中不起作用,但在 Teradata 中起作用。示例查询:

select EMPNO, sum(deptno) as sum_dept, 
   case when sum_dept > 10 then 1 else 0 end as tmp 
from emps 
group by EMPNO; => WORKS in Teradata

但是这在 SparkSQL 和 Calcite 中不起作用。引发以下错误:

执行 SQL 时出错“选择 EMPNO, sum(deptno) as sum_dept, case when sum_dept > 10 then 1 else 0 end as tmp from emps group by EMPNO”:从第 1 行第 50 列到第 1 行第 57 列:列'SUM_DEPT ' 在任何表中都找不到 (state=,code=0)

有人(SparkSQL/Calcite 专家)知道是否有办法让它在 sparkSQL 或方解石中工作?

4

1 回答 1

3

在标准 SQL 中,别名只能在 ORDER BY 子句中使用,但 Teradata 允许在任何地方使用。您必须将别名替换为原始计算:

select EMPNO, sum(deptno) as sum_dept, 
   case when sum(deptno) > 10 then 1 else 0 end as tmp 
from emps 
group by EMPNO;
于 2018-01-26T15:28:37.047 回答