尝试在 Hive 上查找数字不适用于类似查询
Posted
技术标签:
【中文标题】尝试在 Hive 上查找数字不适用于类似查询【英文标题】:Trying to find numerics on Hive doesn't work with like query 【发布时间】:2021-10-21 22:23:10 【问题描述】:我尝试使用以下查询在field1
中查找具有数值的行
SELECT field1 WHERE field1 NOT LIKE '%[^0-9]%'
但是,这也会返回字母数字值,例如 3a3f3rdf3
我可以用这个查询做我想做的事情。
SELECT field1 WHERE field1 NOT RLIKE '[^0-9]'
这也有效:
SELECT field1 WHERE cast(field1 as double) is not null
但我仍然想了解为什么第一个不起作用,主要是我无法从查询中分辨出区别。
【问题讨论】:
【参考方案1】:LIKE/NOT LIKE
- 这是一个普通的字符串比较运算符。所以field1 NOT LIKE '%[^0-9]%'
不会给你正确的结果,因为它会寻找字符串[^0-9]
,而不是像寻找单个数字的正则表达式。参考下面的屏幕截图,我创建了一个包含各种不同数据的 tmp 表。当我们使用not like
时,您可以看到只有[^0-9]
被排除在外,一切都保留了下来。
RLIKE
- 这是一个正则表达式字符串比较运算符。因此,您使用的语法(RLIKE '[^0-9]') 是一个正则表达式,它将正确显示没有所有数字的数据。
请参阅此链接以了解更多关于 rlike - https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_operators.html#rlike
最后一个 SQL 将显示没有所有数字的数据,因为当该转换结果为 null 时,您正在转换和拾取。
【讨论】:
我不明白为什么 NOT LIKE 不起作用的解释。如果它在子字符串中查找 [^0-9](即任何非数字),它应该可以正常工作,这也是 RLIKE 查询所做的。 not like 不是正则表达式比较运算符,因此它会寻找精确的模式,而不像您期望的正则表达式。我对我的回答附加了更多解释。以上是关于尝试在 Hive 上查找数字不适用于类似查询的主要内容,如果未能解决你的问题,请参考以下文章