【问题标题】:How to create volatile table inn teradata using SAS dataset without sql sandbox如何在没有 sql 沙箱的情况下使用 SAS 数据集创建易失性表 inn teradata
【发布时间】:2018-02-14 08:15:37
【问题描述】:

我有一个 SAS 数据集,我需要使用 SAS 数据集在 Teradata 中创建一个易失性表。但是,我没有沙箱来将表存储在 Teradata 服务器上。有没有一种方法可以在没有 SQL 沙盒的情况下从 SAS 数据集创建 Teradata 易失性表。

【问题讨论】:

  • 什么是 SQL 沙箱?它与 SAS 或 Teradata 有什么关系?
  • 沙盒意味着您在 teradata 服务器上有一个存储空间来创建永久表或视图..

标签: sas teradata


【解决方案1】:

在 Teradata 中创建 volatile 表非常简单,只需在 libname 语句中使用 dbmstemp=yes 选项即可。

libname TDWORK teradata connection=global dbmstemp=yes .... ;
data tdwork.test1 ;
  set sashelp.class ;
run;

确保在您的所有 LIBNAME 和 CONNECT 语句中使用 connection=global 选项,以便与 Teradata 的所有连接都使用相同的会话,以便您可以查看易失性表。至少保持其中一个 libref 处于打开状态,以便保持连接。

那么你也可以使用 passthru SQL 创建一个 volatile 表。

proc sql ;
  connect to teradata (connection=global .... );
  execute (
    create volatile table test2 as (
      select * from test1
    ) with data on commit preserve rows 
  ) by teradata;
quit;

或通过 SQL 代码引用易失性表。

因此,如果您想从 Teradata 中提取来自 MYDB.MYTABLE 的所有记录,其中 NAME 在您上传到易失性表 TEST1 的名称列表中,您使用上面的第一个数据步骤创建,您可以使用代码像这样:

proc sql ;
  connect to teradata (connection=global .... );
  create table mytest as select * from connection to teradata 
  ( select * from mydb.mytable 
    where name in (select name from test1)
  );
quit;

【讨论】:

  • 谢谢汤姆,这有帮助.. 要在结果中添加另一个查询,如果我有数据库 x 并且我想在 db x 中加入一个具有永久表的易失表,是否可以去做。我使用下面的代码:proc sql;连接到 teradata (server=,...,connection = global);创建表 lib.table 作为 select * from connection to teradata ( select variable1, variable2 from test2 join x.tab); lib 是 sas 库名称,因为我正在尝试基于连接 Teradata 中的易失性和永久表创建 SAS 数据集,x 是 Teradata 中的数据库,test2 是易失性表。
  • 无需使用指向同一 Teradata 服务器的输出 SAS libref 将其拉回 SAS。只需使用 execute (....) by teradata; 语句即可运行纯 Teradata 代码。但是,如果您的输出 libref 指向 SAS 数据集(或其他一些外部数据库),那么您可能需要在注释中使用该语法。
  • 不要在传递 SQL 中引用像 libref lib 这样的 SAS 内容。你只能引用 Teradata 的东西。易失性表通常不需要数据库前缀,但我认为如果他们这样做,那么它们就在您的个人数据库中(即使您有 0 空间来存储永久对象)。 create table libref.sasdsn as select * from connection to teradata (select a.x,b.y from volatile_table a inner join dbname.tblname b on a.id =b.id) ;
  • libname lib teradata server=... authdomain="..." connection=global proc sql;连接到 teradata (server=... authdomain="..." connection=global);创建表 saslib.table 作为 select * from connection to teradata(从 lib.volatile_table 连接 db.x 中选择变量 1、变量 2); x 是数据库 DB 中的永久表,saslib 是 sas libname,我收到一条错误消息,提示 volatile 表 lib.volatile_table 不存在
  • 您通常不会对易失性表使用两个级别的名称。因此,如果您创建了一个名为 fred 的易失性表,那么您将在 Teradata 代码中将其引用为 fred
猜你喜欢
  • 2016-07-27
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
相关资源
最近更新 更多