Как вставить пустое значение вместо NULL в столбцы, отличные от типа данных String в кусте - PullRequest
1 голос
/ 18 марта 2019

У меня есть оператор create, например

CREATE TABLE temp_tbl (EmpId String, Salary int);

Я хотел бы добавить идентификатор сотрудника и пустое значениев таблицу.

Итак, что я сделал:

  1. вставьте таблицу перезаписи temp_tbl, выберите «013» в качестве EmpId, «» в качестве зарплаты из таблицы;
hive> select * from temp_tbl;
OK
013     NULL

Но ожидаемый результат -

hive> select * from temp_tbl;
OK
013     NULL ---> Blank instead of NULL
Также пробовал с "".Тем не менее я получаю его как NULL вместо пустого

3. Попытка создать таблицу со свойством сериализации

CREATE TABLE temp_tbl (EmpId String,Salary int) TBLPROPERTIES ('serialization.null.format' = '');

Это тоже не изменило значение NULL на пустое.

Какой может быть обходной путь для того же.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Все типы, кроме strings / varchar / char и некоторых сложных типов, таких как array, в Hive не могут быть пустыми, возможен только NULL. Пустая строка '' - вполне нормальное значение типа String. Вы также можете создать пустой array () (массив с нулевым размером).

В качестве обходного пути вы можете использовать некоторые предопределенные значения, которые обычно не содержатся в ваших данных, для представления некоторых специальных числовых значений, например -99999. В качестве альтернативы вы можете хранить свои числовые значения в столбце String, в этом случае вы сможете иметь пустые значения в нем. Но невозможно присвоить (привести) пустые строки к числовым типам, потому что такое пустое значение недопустимо.

Если вы попытаетесь присвоить пустую строку числовому столбцу или приведение к числовому типу, результат будет таким же, как если бы вы преобразовывали нечисловую строку в числовое значение - NULL (в Hive, если невозможно преобразовать, возвращается NULL ) или получите java.lang.NumberFormatException в Java.

0 голосов
/ 18 марта 2019

Вариант использования при выборе данных.

Select 
(CASE 
       WHEN columnName is null THEN ''
       ELSE columnName 
END) as 'Result' from temp_tbl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...