在 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
子句中的另一列。
我有一个 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
子句中的另一列。