Преобразование номера Bigint Возвращает NULL - PullRequest
0 голосов
/ 29 января 2019

Мне нужно преобразовать целочисленное значение в самый высокий тип данных в улье, так как мое значение состоит из 25 цифр

select cast(18446744073709551614 as bigint); 

NULL будет возвращено значение для вышеупомянутого select stmnt;

Мне очень хорошо известно, что предоставленное число больше, чем наибольшее число Bigint.Но мы получаем такие значения, по которым мне нужно вычислить max, min, sum, avg

Итак, как я могу привести такой тип значений, чтобы я не получал значения NULL.

1 Ответ

0 голосов
/ 29 января 2019

Используйте decimal(38, 0) для хранения номеров, больших чем BIGINT, он может хранить 38 цифр. BIGINT может хранить 19 цифр.Читайте также руководство о десятичном типе .

Для литералов необходим постфикс BD.Пример:

hive> select CAST(18446744073709551614BD AS DECIMAL(38,0))+CAST(18446744073709551614BD AS DECIMAL(38,0));
OK
36893488147419103228
Time taken: 0.334 seconds, Fetched: 1 row(s)
hive> select CAST(18446744073709551614BD AS DECIMAL(38,0))*2;
OK
36893488147419103228
Time taken: 0.129 seconds, Fetched: 1 row(s)
...