Существует ли отказоустойчивый механизм в HIVE? - PullRequest
0 голосов
/ 18 апреля 2020

Я использую пользовательскую функцию (назовем ее 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) имеет ошибку (вместо прерывания всего запроса и ничего не вернуть?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...