Записване на sas данни в Hive с цифрова променлива с повече от 15 цифри

Опитвам се да запиша 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


person pallab bhattacharya    schedule 01.10.2019    source източник
comment
Стойностите в SAS като числа ли са или символни низове? SAS съхранява всички числа като 8 байта с плаваща запетая, така че 16 цифри са по-прецизни, отколкото могат да се справят.   -  person Tom    schedule 01.10.2019
comment
Стойността 1589000007877656, цитирана в предупреждението, попадна ли в целевия набор от данни или не?   -  person Tom    schedule 01.10.2019
comment
Може да попитате поддръжката на SAS. Страниците с документация documentation.sas.com/ говорят главно за това как да контролирате SAS информацията, използвана при четене на данни от Hadoop. Не за контролиране на това как данните се записват в Hadoop.   -  person Tom    schedule 01.10.2019


Отговори (1)


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

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

Резултат:

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

Така че, ако имате стойности на ID, по-големи от 9,007,199,254,740,992, тогава не можете да ги съхранявате като числа в SAS.

Защо съхранявате ID стойностите като числа? Няма нужда да извършвате аритметика върху стойностите на ID.

person Tom    schedule 01.10.2019
comment
Всъщност тази стойност на ID ще бъде използвана от друго приложение, което съхранява стойността на ID (nacct за тези данни) като число и преобразуването от число в низ в това приложение не е лесно, следователно се опитвате да го качите в Hive като число - person pallab bhattacharya; 01.10.2019
comment
Всъщност моята ID стойност е дълга само 16 цифри, nit 18 цифри, въпросът е как мога да прехвърля тези данни, както е с 16-цифрена цифрова променлива към Hive - person pallab bhattacharya; 01.10.2019
comment
Бележката в оригиналната ви публикация е само информационна. Проверете дали наистина работи. Имате ли стойности, по-големи от 9,007,199,254,740,992? - person Tom; 01.10.2019
comment
Здравей Том, не работи, проверих данните в Hive, показват нещо подобно, 1.58900000787765e15 за горната стойност. Искам да има пълната 16-цифрена стойност вместо тази... - person pallab bhattacharya; 01.10.2019