Hadoop ApacheCalcite和teradata中的SQL查询

Hadoop ApacheCalcite和teradata中的SQL查询,hadoop,apache-spark,teradata,apache-calcite,Hadoop,Apache Spark,Teradata,Apache Calcite,需要关于阿帕奇方解石的建议。我们在Teradata上运行了一些SQL查询。现在,我们想在Hadoop/Spark上运行这些sql查询(实际上可能是使用ApacheCalcite) 我们在Spark SQL(2.6.3)和Apache calcite中尝试了这些SQL查询,但很少有查询不运行。问题是,如果我们定义一个派生变量(AS)并尝试在同一级别的同一查询中使用它,它在SparkSQL和calcite中不起作用,但在Teradata中起作用。查询示例: select EMPNO, sum(dep

需要关于阿帕奇方解石的建议。我们在Teradata上运行了一些SQL查询。现在,我们想在Hadoop/Spark上运行这些sql查询(实际上可能是使用ApacheCalcite)

我们在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和方解石中,这一点不起作用。抛出以下错误:

执行SQL“选择EMPNO,sum(deptno)作为”时出错 sum_dept,当sum_dept>10时,则1或0结束为来自EMP的tmp 按EMPNO分组”:从第1行第50列到第1行第57列:列 在任何表中都找不到“SUM_DEPT”(状态=,代码=0)


有人(SparkSQL/方解石专家)知道有没有办法让它在SparkSQL或方解石中工作吗?

在标准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;

谢谢你。是的,当然这是一种方法。在我们的例子中,别名是一个复杂的别名,通常包含多个case语句。所以我想知道是否有简单的方法可以做到这一点。我想你是说这是不可能的?标准SQL提出的常用方法是嵌套查询,即在派生表或公共表表达式中指定别名,然后在外部级别使用它。您好,我正在寻找一种工具,将Teradata查询转换为Hive/SQL查询。我发现一个网站“”声称这样做。但是对于上面的查询,它没有正确地转换它。我很想知道是否有人成功地使用过这样的工具。非常需要这个。@sunillp你找到这样的工具成功了吗?