我正在通过redash查询一个hive表。我有一个类似以下的问题:
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>
3条答案
按热度按时间xiozqbni1#
hive正则表达式需要双重转义
另外,为了完全匹配,你应该使用锚定,因此-
如果空字符串也是一个选项,那么-
您可以采用相反的方法搜索不包含非数字的字符串-
在配置单元中,假强制转换将导致null(而不是异常),因此您可以使用-
或
gwo2fgha2#
在hive中,代码应该编译为
REGEXP
或者RLIKE
. 但是,正则表达式并不能满足您的需要。你想要:也就是说,所有字符都是数字,而不是只包含一个数字。实际上,你的版本可以匹配任何字符串,因为数字是可选的。
ui7jx7zq3#
您可以尝试:
注意,上面的表达式确保
id
仅由数字组成(非空)。你在检查id
包含0到n个数字(这是*
量词的意思是):这是一种允许的方式,因为它基本上允许任何不为空的东西。