Запись данных sas в Hive с числовой переменной, содержащей более 15 цифр - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь записать данные SAS в Hive, используя SAS. У меня есть переменная ID в таблице длиной> 15 цифр, и мне нужно сохранить эту переменную как числовую, когда я записываю эти данные в Hive. Я попробовал приведенный ниже скрипт, но он выдает мне следующее предупреждение, а значения в таблице Hive усекаются до 15 цифр с помощью буквы "e".

data scr.EOB_tgt(dbtype=(nacct="BIGINT"))
;
format nacct best20.
ncust $10.
;
set lat2(keep=ncust nacct bal);
run;

NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables.
WARNING: Value 1589000007877656 has more than 15 digits.  It may not be accurately inserted to the BIGINT column.

Кто-нибудь знает, как решить эту проблему?

Я хотел бы получить полное 16-значное числовое значение в таблице Hive

1 Ответ

0 голосов
/ 01 октября 2019

SAS хранит все числа как 8-байтовые числа с плавающей запятой. Таким образом, вы не можете представлять целые числа с более чем 15 цифрами точно. Чтобы увидеть максимальное целое число, которое может быть представлено в точности, используйте функцию CONSTANT ().

data _null_;
  x=constant('exactint');
  put x 16. +1 x comma21.;
run;

Результат:

9007199254740992 9,007,199,254,740,992

Так что, если у вас есть какие-либо значения идентификатора больше, чем 9,007,199,254,740,992, то вы не сможетехраните их как числа в SAS.

Почему вы храните значения идентификаторов как числа? Нет необходимости выполнять арифметику для значений идентификаторов.

...