Как проверить первые непустые значения в улье - PullRequest
0 голосов
/ 06 ноября 2018

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

Например

Выбор ('', 5) должен привести к 5

Выбор (5, '') должен привести к 5

Выбор ('', NULL) должен привести к NULL

Выбор ('', '') должен привести к ''

Пожалуйста, помогите, я знаю, что coalesce будет применим для поиска первых ненулевых значений.

1 Ответ

0 голосов
/ 06 ноября 2018

Преобразование NULL s в строку 'NULL', пустое значение в NULL и использование coalesce, а затем обратное преобразование. Как то так:

create temporary macro empty2null(s string)
case when s='' then null
     when s is null then 'NULL'
     else s
  end;

create temporary macro NULL2empty (s string)
case when s='NULL' then null
     when s is null then ''
     else s
end;

select NULL2empty(coalesce(empty2null(''),empty2null(5)));

Единственное неудобство заключается в том, что вы должны обернуть каждый столбец в empty2null(), кроме констант типа 5, это просто для проверки

Тесты:

hive> create temporary macro empty2null(s string)
    > case when s='' then null
    >      when s is null then 'NULL'
    >      else s
    >   end;
OK
Time taken: 0.97 seconds
hive>
    > create temporary macro NULL2empty (s string)
    > case when s='NULL' then null
    >      when s is null then ''
    >      else s
    > end;
OK
Time taken: 0.02 seconds
hive>
    > select NULL2empty(coalesce(empty2null(''),empty2null(5)));
OK
5
Time taken: 7.08 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(''),empty2null('')));
OK

Time taken: 3.96 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(''),empty2null(null)));
OK
NULL
Time taken: 0.952 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(5),empty2null('')));
OK
5
Time taken: 0.067 seconds, Fetched: 1 row(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...