类sql表达式出现“输入不匹配”错误

mdfafbf1  于 2021-06-25  发布在  Hive
关注(0)|答案(3)|浏览(772)

我正在通过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>
xiozqbni

xiozqbni1#

hive正则表达式需要双重转义
另外,为了完全匹配,你应该使用锚定,因此-

id RLIKE '^\\d+$'

如果空字符串也是一个选项,那么-

id RLIKE '^\\d*$'

您可以采用相反的方法搜索不包含非数字的字符串-

id  NOT RLIKE '\\D'

在配置单元中,假强制转换将导致null(而不是异常),因此您可以使用-

cast(id as int) is not null

int(id) is not null
gwo2fgha

gwo2fgha2#

在hive中,代码应该编译为 REGEXP 或者 RLIKE . 但是,正则表达式并不能满足您的需要。你想要:

WHERE id RLIKE '^[0-9]*$'

也就是说,所有字符都是数字,而不是只包含一个数字。实际上,你的版本可以匹配任何字符串,因为数字是可选的。

ui7jx7zq

ui7jx7zq3#

您可以尝试:

WHERE id RLIKE '^[0-9]+$'

注意,上面的表达式确保 id 仅由数字组成(非空)。你在检查 id 包含0到n个数字(这是 * 量词的意思是):这是一种允许的方式,因为它基本上允许任何不为空的东西。

相关问题