Я использую пользовательскую функцию (назовем ее FUNC_1) в запросе HIVE. По какой-то неизвестной причине FUNC_1 имеет некоторые проблемы при обработке нескольких строк. В частности:
CREATE TEMPORARY FUNCTION FUNC_1 as 'org.example.letsdobigdata.func_1';
SELECT FUNC_1(col1), col2, col3
FROM EXAMPLE_TABLE;
Поскольку FUNC_1 имеет проблемы при обработке col1, сообщается об ошибке, как показано ниже:
Task with the most failures(4):
-----
Task ID:
task_*********_******_*******
URL:
http://0.0.0.0:8088/*********
-----
Diagnostic Messages for this Task:
Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"-----","_col1":"------","_col2":"-----","_col3":---
at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:265)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:444)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"-----","_col1":"------","_col2":"-----","_col3":---
at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:253)
... 7 more
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating FUNC_1
Интересно, существует ли какой-либо отказоустойчивый механизм, позволяющий продолжить выполнение запроса когда функция имеет ошибку?
(Например, в python мы можем сделать:
try:
return FUNC_1(x)
except:
return NULL
)
Можем ли мы сделать что-то подобное в HIVE (или в общем, любой sql аромат) такой, что я могу получить NULL, когда FUNC_1 (col) имеет ошибку (вместо прерывания всего запроса и ничего не вернуть?)