我有一个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)
菲尼克斯不支持他们,还是有其他方法可以做到这一点? 任何建议都会有所帮助。
答案 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
子句中的另一列。