Hive - 如何检查数字列是否有数字/小数?

时间:2017-01-10 11:05:11

标签: sql date hadoop hive

我正在尝试生成一个hive查询,它将获取多个数字列名称并检查它是否具有数值。如果列具有数值,则输出应为(列名,true)否则如果字段为NULL或某个字符串值,则输出应为(列名,false)

SELECT distinct (test_nr1,test_nr2) FROM test.abc WHERE (test_nr1,test_nr2) not like '%[^0-9]%';

SELECT distinct test_nr1,test_nr2 from test.abc limit 2;
test_nr1   test_nr2
NULL    81432269
NULL    88868060

the desired output should be :
test_nr1  false
test_nr2  true

由于test_nr1是十进制字段并且它具有NULL值,因此它应该输出false。

欣赏有价值的建议。

2 个答案:

答案 0 :(得分:2)

您可以使用cast功能。当值无法转换为数字时,它返回NULL

例如:

select case when cast('23ccc' as double) is null then false else true end as IsNumber;

答案 1 :(得分:0)

您在这里尝试使用字符类模式匹配语法,并且它在每个SQL实现IIRC中都不起作用,但是,正则表达式匹配适用于大多数(如果不是全部)SQL实现。

考虑到您正在使用配置单元,应该这样做:

SELECT ('test_nr1', test_nr1 RLIKE '\d'), ('test_nr2', test_nr2 RLIKE '\d') FROM test.abc;

你应该记住,SQL中的regexp匹配非常慢。