Sql 像表达式一样给出';输入不匹配';错误
我正在通过Redash查询蜂窝表。我有一个类似以下的问题:Sql 像表达式一样给出';输入不匹配';错误,sql,regex,hive,redash,rlike,Sql,Regex,Hive,Redash,Rlike,我正在通过Redash查询蜂窝表。我有一个类似以下的问题: SELECT CAST(id AS INT) as id, COUNT(sales) AS num_sales FROM sales_table WHERE id RLIKE '\d*' GROUP BY id 我试图只选择一个数字字符串的ID,因此使用了WHERE子句。这给了我一个错误: Error running query: line 42:20: mismatched input
SELECT
CAST(id AS INT) as id,
COUNT(sales) AS num_sales
FROM
sales_table
WHERE
id RLIKE '\d*'
GROUP BY
id
我试图只选择一个数字字符串的ID,因此使用了WHERE
子句。这给了我一个错误:
Error running query: line 42:20: mismatched input 'RLIKE'. Expecting: '%', '*', '+', '-', '.', '/', 'AT', '[', '||', <expression>
运行查询时出错:第42:20行:输入“RLIKE”不匹配。应为:“'”、“*”、“+”、“-”、“.”、“/”、“AT”、“[”、“| |”,
在配置单元中,代码应使用REGEXP
或RLIKE
进行编译。但是,正则表达式不能满足您的要求。您需要:
WHERE id RLIKE '^[0-9]*$'
也就是说,所有字符都是数字,而不是只包含一个数字。实际上,您的版本将匹配任何字符串,因为数字是可选的。您可以尝试:
WHERE id RLIKE '^[0-9]+$'
请注意,上面的表达式确保id
仅由数字组成(且非空)。原始regexp检查id
是否包含0到n个数字(这就是*
量词的意思):这是允许的方式,因为它基本上允许任何非空的内容。1)
Hive正则表达式需要双重转义 此外,对于完全匹配,您应该使用锚定,因此-
id RLIKE '^\\d+$'
如果空字符串也是一个选项,那么-
id RLIKE '^\\d*$'
2) 您可以采用相反的方法搜索不包含非数字的字符串-
id NOT RLIKE '\\D'
3) 在配置单元中,错误强制转换将导致null(而不是异常),因此您可以使用-
cast(id as int) is not null
或
Hive正则表达式需要双重转义
int(id) is not null