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

Error when using sql query containing IFNULL and serial number column in Phoenix

我有一个 SQL 查询如下:

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

当我 运行 在 mysql 中执行上述查询时,我得到了想要的结果,但我想在 Phoenix 上对存储在 Hbase 中的 table 执行相同的查询。 我收到@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)

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

不知道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 子句中的另一列。