对于UDF自定义函数编写规则、打成jar包、上传服务器、add jar...、create temporary function ...等这些步骤这里不作介绍,网上一大堆资料。
这里说说我项目中遇到的问题。项目中我需要将mysql、sqlserver的SQL语句转换为hive能识别的hql。很简单,在项目中写一些替换代码,将SQL中的内置函数replace成hive的相关内置函数就行,例如将isnull()替换成nvl()等。前提得hive中有类似函数。
问题来了,SQL中的有些内置函数如IsNumeric()在hive中就没找到现成可替换的(我的为hive-2.3.2),哪位正在看本文的大神们若知道有替换的欢迎留言哈。。。
那怎么办?就目前以我的知识储备量只能通过hive自定义函数来解决了。说干就干,代码撸起来,终于憋了半天写出来了(没办法,肚子就这么货)。打包、上传、hiveCli 本地客户端 add jar、create temporary function...一顿操作猛如虎,测试也木问题。泡杯茶,点根烟,项目跑起来......
好吧,果然没那么顺利,报错如下:org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10011]: Invalid function isnumeric
啥?函数无效,刚才在hivecli上跑的还很嗨呢,都一个爹生的在项目中怎么就无效了呢。此时心中有一万只草泥马在可劲了奔腾。没办法只能百度了(面向百度编程的程序猿就是我这种)。卧槽,网上竟然找不到类似的问题,难道我是全网第一个遇到此类问题