Как мне создать энергозависимую таблицу в терадате, используя соединитель 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;