سؤال

لدينا قاعدة بيانات Teradata مليئة بأحداث بيانات Bigint. SAS هي المحرك التحليلي الأساسي للمنظمة. تقوم مكتبة SAS Access بإختناقات على Bigint وبالتالي يفرضون جميع التعليمات البرمجية لإلقاء المتغيرات في عدد صحيح أو عشري قبل إرجاعها إلى SAS. مثال:

proc sql;
connect to database (blah blah);
create table sas_dataset as 
  select * from connection to database(
    select
      cast(bigint_var as integer),
      varchar_var,
      char_var,
    from some_table
    );
  disconnect from database;
  quit;

هل يعرف أحد وسيلة لإصلاح هذا؟ ربما ماكرو لمتغيرات الصب أو إصلاح وصول SAS؟ ضع في اعتبارك أن هناك حرفيا الآلاف من المتغيرات في قاعدة البيانات هذه هي Bigint وجعل التغييرات في قاعدة البيانات غير من السؤال.

هل كانت مفيدة؟

المحلول

إذا لم تتمكن من إصلاحه على جانب SAS، فيمكنك دائما إنشاء مجموعة من المشاهدات على جانب Teradata للقيام بالقبض. ثم لديك ساس الوصول إلى المشاهدات:

create view sas_cast_db.some_table as 
select col1, col2, cast(bigint_var as decimal(18)), col3
from real_db.some_table;

نظرا لأن لديك الكثير من الجداول، فقد يكون من الممكن كتابة بعض SQL لتوليد هذه القاموس في قاموس البيانات.

نصائح أخرى

المشكلة هي أن SAS يمكن أن تعامل فقط من 15 رقما بحد أقصى لنوع بيانات الطبخ. قدمت SAS بعض أعمال العمل ل SAS 9.2 (مذكورة أعلاه) لهذه المشكلة. يمكنك أيضا الحصول على مسؤول SAS Platform الخاص بك لترتيب خادم SAS ليتم تحديثه بحيث يقوم باقتطاع حقول Bigint إلى 15 رقما (تنطبق تحذيرات واضحة)، أو تحديث عبارة Libname الخاصة بك لتعيين جميع النسخ المتطفلين تلقائيا.

http://support.sas.com/kb/39/831.html

عينة من الرموز

data temp1; 
   set mylib.bigclass (dbsastype= (id='char(20)'));
run;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top