在Phoenix中使用包含IFNULL和序列号列的sql查询时出错

时间:2018-02-12 08:39:42

标签: mysql hbase phoenix

我有一个SQL查询,如下所示:

Select 
    @sl:=@sl+1 as slNum,
    IFNULL(startTime,'-'),
from 
    race,
    (Select @s1:=0) x ;

当我在mysql中运行上述查询时,我得到了所需的结果,但是我想在Phoenix上为存储在Hbase中的表执行相同的查询。 我收到@sl的以下错误:

org.apache.phoenix.exception.PhoenixParserException: ERROR 601 (42P00): Syntax error. Encountered "@" at line 'x', column 'y'.
Caused by: NoViableAltException(15@[])

当我注释掉序列号时,我明白了:

org.apache.phoenix.exception.PhoenixParserException: ERROR 603 (42P00): Syntax error. Unexpected input. Expecting "LPAREN", got "IFNULL" at line x2, column y2.
Caused by: UnwantedTokenException(found=IFNULL, expected 91)

菲尼克斯不支持他们,还是有其他方法可以做到这一点? 任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我不知道Phoenix是否支持动态SQL,但是有一种方法可以在没有动态SQL的情况下生成行号:

SELECT
    COALESCE(r1.startTime, '-') AS startTime
    (SELECT COUNT(*) FROM race r2 WHERE r2.startTime <= r1.startTime) slNum
FROM race r1;

我假设开始时间提供了排序。如果没有排序,则使用行号很难定义当前逻辑。您可以将startTime替换为我的子查询的WHERE子句中的另一列。