2012-12-28 4 views
3

all. jdbc 클라이언트를 통해 하이브 udf를 사용할 때 이상한 오류가 발생했습니다.jdbc 클라이언트를 통한 hive udf를 사용할 때 이상한 오류가 발생했습니다.

문자열을 reformat_date이라는 타임 스탬프 형식으로 변환하는 데 도움이되는 udf가 있습니다. 먼저 ADD JARCREATE TEMPORARY FUNCTION을 실행합니다. 둘 다 정상적으로 작동합니다.

또한 하이브리드 cli 모드에서 SQL을 설명하고 실행할 수 있습니다. 사용 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 

덕분이다.

답변

0

나는 귀하의 udf가 예외라고 생각합니다. reformat_date 기능을 사용하는 경우 논리를 확인해야합니다. 그렇지 않으면 udf의 사양을 확인해야합니다.

+0

'reformat_date'는 내 udf입니다. 하이브 쉘에서 사용할 수는 있지만 자바 JDBC 클라이언트에서는 사용할 수 없습니다. – scarcer