【问题标题】:Multiple databases of Teradata and SAS in UNIXUNIX 中 Teradata 和 SAS 的多个数据库
【发布时间】:2014-09-12 15:50:16
【问题描述】:

我想知道如何在 SAS (unix) 中查询 Teradata 同一服务器的多个数据库。我可以为一个数据库执行此操作,但我的查询中涉及的不同数据库很少。唯一相关的文章是SAS connection to Teradata Database using Teradata ODBC,但无法得到正确答案。你能分享一下语法/sn-p。任何评论表示赞赏。 谢谢!

贾斯

编辑:

请看下面的脚本,我想做这样的事情。

libname lib 'mylibraryPath\';

proc sql;
connect to teradata  (user="userid" password="pwaaaowrd" mode=teradata  database=DB1   database=DB2   database=DB3   tdpid="MyServer");
execute (
create volatile table lib.tab1 as 
(

Select statements and several joins of different tables from different databases (server is same)
)
WITH DATA
PRIMARY INDEX (abcd)
ON COMMIT PRESERVE ROWS;
)
By Teradata;
execute (commit work) by Teradata;
disconnect from teradata;
quit;

【问题讨论】:

  • select * from databasename.tablename 这样限定表名应该可以工作
  • 您所做的似乎是正确的。你面临的问题是什么?我认为你可以在你的“connect”语句中去掉那些“database=”参数,只需按照 dnoeth 的建议用数据库名称预先限定表名。
  • 你能举一个非常具体的例子,包括一个示例 SELECT 语句吗?这会有所帮助。

标签: sql unix sas teradata


【解决方案1】:

正如 Chris 在您链接的问题中所写,您可以使用所谓的隐式传递为您需要指向的每个 Teradata db 定义一个 libname:

libname db1 teradata user=xxx1 password=yyy1 database=zzz1;
libname db2 teradata user=xxx2 password=yyy2 database=zzz2;

然后您可以在数据步骤或 SQL 查询中使用它们,就像它们是标准 SAS 库一样:

data join;
    merge db1.table1 db2.table2;
    by id;
run;

proc sql;
    select *
    from db1.table1 t1
    left join db2.table2 t2
        on t1.id=t2.id;
quit;

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2020-01-21
    • 2014-10-23
    • 1970-01-01
    • 2015-04-01
    • 2021-07-29
    • 2015-08-12
    • 2019-03-20
    相关资源
    最近更新 更多