【问题标题】:How do I create a volatile table in teradata using OLEDB connector to SAS如何使用 OLEDB 连接器到 SAS 在 teradata 中创建易失性表
【发布时间】:2016-07-27 06:25:38
【问题描述】:

这不是一个纯粹的 Teradata 问题。我不是要求在 Teradata 中创建易失性表。对于使用OLEDB 从 SAS 连接到 Teradata 的人来说,这是一个问题。我知道Volatile tables 可以使用SQL assistant 甚至Teradata Interface to SAS 在心跳中创建。但是,如果有些用户不在 SAS 网格上,并且他们没有安装 SAS i/f to teradata 并且他们使用 OLEDB 连接 SAS 和 Teradata。

这是一个使用 OLEDB 运行良好的代码 sn-p,它提供了一些我们在说什么的概念。

以下代码运行良好:

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 

这是目前为 SAS 安装的 AFAIK

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

你是如何让它工作的?

【问题讨论】:

  • 您可能需要考虑致电技术支持。它包含在 SAS 的价格中,它们响应迅速,可以解决您的设置和具体问题。

标签: sql sas oledb teradata msdasql


【解决方案1】:

我没有要引用的 teradata 实例,但我认为您的问题是您没有使用引用名称创建 oledb 连接,然后您尝试将其引用为“teradata”。

试试这个:

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

【讨论】:

    【解决方案2】:

    你有两个错误。首先,您定义了到OLEDB 的连接,然后尝试在名为TERADATA 的未定义连接上执行命令。将AS TERADATA 添加到您的CONNECT 语句以便命名连接或更改EXECUTE 语句以使用OLEDB 连接名称。

    您最后的插入语句还将在 SAS WORK 库中创建一个表。您是否期望它能够插入或读取 OLEDB 连接?如果要将 SAS 中的数据插入 Teradata 表,则需要创建指向 Teradata 的 libref。无需先“创建”表。 SAS 很乐意为您创建表格。

    libname TERADATA OLEDB ... connection details ... ;
    proc sort data=mysource(keep=myid_sas mydate) nodupkey out=TERADATA.idlist;
      by _all_;
    run;
    

    【讨论】:

    • 我完全迷路了。我没有 SAS 作为我检查的目的。所以如果重写它应该怎么看connect to OLEDB as teradata (Provider='MSDASQL' Extended_Properties='DRIVER={Teradata};DBCNAME=SITEPRD;AUTHENTICATION=ldap' UID="&DMID" PWD="&DMPWD") 如果你可以PL请编辑答案。使用这两种方法创建一个 volatile 表并从 SAS 表中插入到其中
    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 2018-02-14
    • 2016-01-18
    • 2013-06-11
    • 2016-04-25
    • 2018-09-14
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多