【问题标题】:Connecting to Teradata via SAS (SQL Explicit Passthrough), for data pull, is it recommended to use execute statement?通过SAS(SQL Explicit Passthrough)连接Teradata,拉取数据,是否推荐使用execute语句?
【发布时间】:2020-03-23 19:00:39
【问题描述】:

我见过两种选择:

  1. 不使用执行语句

    libname lib "/dir";
    run;
    
    proc sql ; 
    CONNECT TO TeraData (Server = 'edw' User =&tduser pass=&tdpass Database = UDW Mode = TeraData);            
    create table lib.datanew as
    
    select * from connection to teradata 
    (select a.name,b.age from table1 a left join table2 b on a.pkey=b.pkey); disconnect from teradata; quit;
    
  2. 使用 execute 在 Teradata 中创建多集易失性表,然后将其带到 SAS 库中

    libname lib "/dir";
    run;
    
    proc sql;
    CONNECT TO TeraData (Server = 'edw' User =&tduser pass=&tdpass Database = UDW Mode = TeraData);
    execute(    create multiset volatile table datanew as
    
        (select a.name,b.age from table1 a left join table2 b on a.pkey=b.pkey)
            with data primary index (name) on commit preserve rows
        )
    BY TeraData;
    
    CREATE TABLE lib.datanew AS (SELECT * FROM CONNECTION TO TeraData (SELECT * FROM datanew));
    disconnect from teradata;
    quit;
    

我只是想了解一种方法或另一种方法是否可以更快?如果有,为什么?

【问题讨论】:

  • 在某些情况下,使用易失性表有助于将更多逻辑“下推”到数据库中,但在此示例中似乎并非如此。我希望第一个会稍微好一点,因为它做的工作少了一点。顺便说一句,第二个示例似乎有一个错字:它命名了易失性表 datanew,但随后尝试从 libnew 中进行选择;两个请求中的名称需要匹配。
  • 感谢您的评论。我已经更正了表名拼写错误。
  • 与您的 Teradata DBA 确认制作易失性表是否有帮助或有坏处。答案取决于表的定义方式以及 Teradata 如何尝试优化查询。例如,如果这意味着 Teradata 可以更轻松地找出如何避免访问所有数据或防止查询倾斜,从而使一个或多个节点成为性能瓶颈,它可能会节省一步完成的时间。

标签: sql sas teradata


【解决方案1】:

因此,当您使用 execute 语句时,您使用的是传递功能 (Docs)。 这意味着你的 sql 代码将在 DBMS 中直接执行,而 sas 只会获取结果表。

更多例子你可以在pdf看到

另外SAS Community也有讨论。

【讨论】:

  • 您好 Sanek,感谢您的问题编辑和回答。但是,我列出的两个选项都使用显式直通(我没有使用 libname 连接到 Teradata)。所以我想还有一些其他的区别。
  • @DSR ,你能用 strace 执行这两个代码吗?代码:options sastrace=',,t,d' sastraceloc=saslog nostsuffix; 来自 here 。因此,我希望您会看到不同的查询。
【解决方案2】:

回答我的部分问题。

我发现当我需要在 Teradata 中创建多个易失性表时,使用已经创建的表,2) 是正常的选择;我可以运行 proc sql 命令,就像我在 Teradata SQL 助手环境中一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2019-09-06
    • 2020-01-21
    • 2012-01-04
    • 2015-11-03
    • 2013-02-01
    • 2019-05-30
    • 2020-05-26
    相关资源
    最近更新 更多