Как мне создать энергозависимую таблицу в терадате, используя соединитель OLEDB для SAS

Это не чисто вопрос Teradata. Я не прошу создать изменчивую таблицу в Teradata. Это вопрос для тех, кто использует OLEDB подключение к Teradata от SAS. Я в курсе Volatile tables может быть создан в одно мгновение с помощью SQL assistant или даже Teradata Interface to SAS, Но если есть пользователи, которые НЕ находятся в сети SAS, и у них нет установленного SAS i/f для teradata и они используют OLEDB для соединения SAS и Teradata.

Вот фрагмент кода, который хорошо работает с использованием OLEDB, что дает некоторое представление о том, о чем мы говорим.

Ниже код будет работать хорошо:

proc sql;
connect to OLEDB(Provider='MSDASQL' Extended_Properties='DRIVER={Teradata};DBCNAME=UDWPROD;AUTHENTICATION=ldap' UID="&DMID" PWD="&DMPWD");
  create table out.TB as 
  select a.*, b.C7
  from connection to OLEDB
(select 
DB.C1,
DB.C2,
from 
DB
) as a inner join mytb as b
on DB.C9=b.C9
and (intnx('year',b.C7,-1,'same') le a.fst_srvc_dt lt intnx('year',b.C7,1,'same'));
%put &sqlxmsg ;
disconnect from OLEDB ;
quit;

В том же духе мы пытались запустить это, но либо есть синтаксическая ошибка (надеюсь), либо ей это не нравится (облом на этом.. не будет слишком хорошим):

  proc sql;
  connect to OLEDB(Provider='MSDASQL' Extended_Properties='DRIVER={Teradata};DBCNAME=SITEPRD;AUTHENTICATION=ldap' UID="&DMID" PWD="&DMPWD");
  execute (create multiset volatile table idlist (my_id integer, mydate date)
  ON COMMIT PRESERVE ROWS) by teradata;
  execute (COMMIT WORK) by teradata;
  insert into idlist
  select distinct MyId_sas, mydate
  from mysource;
quit; 3:52 PM 
And got this output: 3:52 PM 
proc sql;
28     connect to OLEDB(Provider='MSDASQL' Extended_Properties='DRIVER={Teradata};
28 ! DBCNAME=SITEPRD;AUTHENTICATION=ldap' UID="&DMID" PWD="&DMPWD");
SYMBOLGEN:  Macro variable DMID resolves to ConfusedUser
SYMBOLGEN:  Macro variable DMPWD resolves to Youbetcha!

29     execute (create multiset volatile table idlist (my_id integer, mydate date)
30     ON COMMIT PRESERVE ROWS) by teradata;
ERROR: The TERADATA engine cannot be found.
ERROR: A Connection to the teradata DBMS is not currently supported, or is not installed at
       your site.
31     execute (COMMIT WORK) by teradata;
ERROR: The TERADATA engine cannot be found.
ERROR: A Connection to the teradata DBMS is not currently supported, or is not installed at
       your site.
32     insert into idlist
33     select distinct MyId_sas, mydate
34     from mysource;
ERROR: File WORK.idlist.DATA does not exist.
NOTE: SGIO processing active for file WORK.mysource.DATA.
35   quit;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           9.19 seconds
      cpu time            1.75 seconds 

Это то, что сейчас установлено AFAIK для SAS

NOTE: PROCEDURE SETINIT used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
Operating System:   WX64_SV .
Product expiration dates:
---Base SAS Software
        30DEC2016
---SAS/STAT
        30DEC2016
---SAS/GRAPH
        30DEC2016
---SAS/Secure 168-bit
        30DEC2016
---SAS/Secure Windows
        30DEC2016
---SAS/ACCESS Interface to PC Files
        30DEC2016
---SAS/ACCESS Interface to ODBC
        30DEC2016
---SAS/ACCESS Interface to OLE DB
        30DEC2016
---SAS Workspace Server for Local Access
        30DEC2016
---High Performance Suite
        30DEC2016

Как вы получаете это на работу?

2 ответа

У меня нет экземпляра teradata для ссылки, но я думаю, что ваша проблема в том, что вы не создаете соединение oledb со ссылочным именем, тогда вы пытаетесь ссылаться на него как на "teradata".

Попробуй это:

connect to OLEDB as teradata (Provider='MSDASQL' Extended_Properties='DRIVER={Teradata};DBCNAME=SITEPRD;AUTHENTICATION=ldap' UID="&DMID" PWD="&DMPWD");

У тебя две ошибки. Сначала вы определили связь с OLEDB а затем попытался выполнить команды для подключения с именем TERADATA это не было определено. Либо добавить AS TERADATA на ваш CONNECT заявление, чтобы соединение было названо или изменить EXECUTE Заявление использовать OLEDB имя соединения вместо

Также ваш оператор вставки в конце собирается создать таблицу в библиотеке SAS WORK. Вы ожидали, что он сможет вставлять или читать с OLEDB-соединения? Если вы хотите вставить данные из SAS в таблицу Teradata, вам нужно создать libref, который указывает на Teradata. Нет необходимости сначала "создавать" таблицу. SAS с радостью создаст для вас стол.

libname TERADATA OLEDB ... connection details ... ;
proc sort data=mysource(keep=myid_sas mydate) nodupkey out=TERADATA.idlist;
  by _all_;
run;
Другие вопросы по тегам