Странная ошибка при использовании hive udf через jdbc client

все. Я встретил странную ошибку, когда я использую hive udf через jdbc-клиент.

У меня есть udf, чтобы помочь мне преобразовать строку в формат метки времени, называемый reformat_date . Сначала я выполняю ADD JAR и CREATE TEMPORARY FUNCTION , оба работают нормально.

SQL также может быть объяснен в режиме hive cli и может быть выполнен. Но при использовании jdbc-клиента у меня появились ошибки:

    Query returned non-zero code: 10, cause: 
    FAILED: Error in semantic analysis: Line 1:283 Wrong arguments ''20121201000000'': 
    org.apache.hadoop.hive.ql.metadata.HiveException: 
    Unable to execute method public org.apache.hadoop.io.Text com.aa.datawarehouse.hive.udf.ReformatDate.evaluate(org.apache.hadoop.io.Text)  on object [email protected] of class com.aa.datawarehouse.hive.udf.ReformatDate with arguments {20121201000000:org.apache.hadoop.io.Text} of size 1: 
    at com.aa.statistic.dal.impl.TjLoginDalImpl.selectAwakenedUserCount(TjLoginDalImpl.java:258)
    at com.aa.statistic.backtask.service.impl.UserBehaviorAnalysisServiceImpl.recordAwakenedUser(UserBehaviorAnalysisServiceImpl.java:326)
    at com.aa.statistic.backtask.controller.BackstatisticController$21.execute(BackstatisticController.java:773)
    at com.aa.statistic.backtask.controller.BackstatisticController$DailyExecutor.execute(BackstatisticController.java:823)

Мой SQL - это

select count(distinct a.user_id) as cnt from ( select user_id, user_kind, login_date, login_time from tj_login_hive where p_month = '2012_12' and login_date = '20121201' and user_kind = '0' ) a join ( select user_id from tj_login_hive where p_month <= '2012_12' and datediff(to_date(reformat_date(concat('20121201', '000000'))), to_date(reformat_date(concat(login_date, '000000')))) >= 90 ) b on a.user_id = b.user_id 

Благодарю.

3
nl ja de

1 ответы

Я думаю, что ваш udf бросил исключение. если функция reformat_date заключается в том, что вы делаете, вы должны проверить свою логику. Если нет, вы должны проверить спецификацию udf.

0
добавлено
reformat_date - мой udf. Я могу использовать его в оболочке hive, но я не могу использовать его через java-клиент JDBC.
добавлено автор scarcer, источник