Как намеренно вызвать исключение в улье

#exception #hive #hiveql

#исключение #улей #hiveql

Вопрос:

Я хочу вызвать исключение при определенных обстоятельствах, скажем, при некоторых if или case условиях. Я делаю это для возврата некоторого failure статуса, если определенное условие не выполнено, чтобы я мог знать и иметь дело с этим.

Я пробовал несколько методов, но ни один из них не мог вызвать исключение только при некотором условии:

  1. выберите какой-либо столбец, которого не существует: Exception возникает при синтаксическом анализе.
  2. разделите некоторое значение на 0: возвращается значение null вместо повышения Exception
  3. сделайте некоторое утверждение в UDF: утверждения не разрешены в UDF

Интересно, возможно ли преднамеренное исключение для завершения программы.

например (не легальный HiveQL)

ВЫБЕРИТЕ СЛУЧАЙ, some_condition КОГДА true ЗАТЕМ continue ELSE exception ЗАВЕРШИТСЯ КАК condition

Ответ №1:

Взгляните на assert_true UDF, похоже, это именно то, что вам нужно.

 hive> select assert_true (2<1);
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: ASSERT_TRUE(): assertion failed.
Time taken: 0.497 seconds

  

Комментарии:

1. @Neil он завершает работу с такими сценариями, если у вас нет hive.cli.errors.ignore=true (для которого по умолчанию установлено значение false). Проверено с помощью Hive версии 2.1.1.