这篇文章是我在hive执行sql语句使用Rlike时报错了“FAILED: SemanticException [Error 10016]: Line 1:24 Argument type mismatch 'sal': regexp only takes STRING_GROUP types as 1st argument, got DOUBLE”。记录一下我的解决方法。
目录
一、报错问题
hive (default)> select * from emp where sal RLIKE '[2]';
FAILED: SemanticException [Error 10016]: Line 1:24 Argument type mismatch 'sal': regexp only takes STRING_GROUP types as 1st argument, got DOUBLE
二、问题分析
这是一个HiveQL的错误信息,它表示在使用regexp函数时,第一个参数sal应该是字符串类型,而不是double类型。regexp函数是用来匹配正则表达式的,它只能接受字符串类型的参数。你需要将sal转换为字符串类型,才能正确地使用regexp函数。
三、问题解决
你可以使用HiveQL内置的cast函数来实现类型转换,例如将sal转换为字符串类型的写法是:cast(sal as string)。
hive (default)> select * from emp where cast(sal as string) rlike '[7]';
OK
emp.empno emp.ename emp.job emp.mgr emp.hiredate emp.sal emp.comm emp.deptno
7566 JONES MANAGER 7839 1981-4-2 2975.0 NULL 20
Time taken: 0.35 seconds, Fetched: 1 row(s)
四、总结
本文出现的问题是hive使用Rlike进行查询时报错,主要原因是regexp函数是用来匹配正则表达式的,它只能接受字符串类型的参数。所以我们要进行类型转换然后再查询。