【问题标题】:How to move a table from SAS to Teradata SQL Assistant?如何将表从 SAS 移动到 Teradata SQL Assistant?
【发布时间】:2020-02-21 03:50:25
【问题描述】:

我想问您如何将表从 SAS 移动到 TeradataSQL Assistant。

我在 SAS 中所做的是定义一个 libname,然后创建要在 Teradata 中移动的表。

libname NAME "/path"

proc sql;
create table WORK.EXAMPLE as(
select *
from DATASET
);
quit;

但是,我不知道是否需要通过这种方式将 SAS 连接到 Teradata:

libname NAME teradata USER=tduser PASSWORD=tdpasswd SERVER=TDServ ; 

proc sql;
   connect to teradata (
tdpid=“” user=“” password=“”);
create table WORK.EXAMPLE as 
select * from connection to teradata
(select * from DATASET
); quit;

我的问题是:

  1. 在第二个库名中,我应该在哪里考虑路径?
  2. 我应该考虑上面的哪一个代码,为什么?
  3. 如何在 Teradata 中“调用”该表?我试过SELECT * FROM WORK.EXAMPLE,但它不存在。

感谢您的帮助。

【问题讨论】:

  • WORK 是一个临时表,仅在执行期间保持可访问性。要持久化数据集,您需要在第一部分的 CREATE 语句中引用 NAME(您为 lib 命名的名称)而不是 WORK。然后,在您的第二个区域中,您可以在您的库中引用该表,而无需创建额外的临时表。
  • 谢谢凯德。如果我理解你所说的,我需要写proc sql; create table NAME.EXAMPLE as( select * from DATASET ); quit;。但是我怎么能把表移到 Teradata 上呢?我试图写select * from NAME.EXAMPLE,但即使在这种情况下,该表也不存在。我需要在 SAS 中使用connect to Teradata 吗?
  • 运行第一个之后:PROC SQL; CREATE TABLE LIBNAME.TBL_NAME AS SELECT * FROM DATASET; QUIT; 你应该能够简单地执行 'PROC SQL;从 LIBNAME.TBL_NAME 中选择 *; QUIT`,因为您的库应该可以从您的 SAS 工作区中访问...但是,这在很大程度上取决于您的环境设置方式。
  • 所以这意味着表已经上传到 Teradata。但是,如果我不使用连接到,我如何将 SAS 连接到 Teradata?这是一个愚蠢的问题,但这些概念对我来说是新的
  • Teradata 的 SQL 助手工具只是一个用于访问您的 Teradata 数据库的实用程序,因此它与您的问题没有任何关系。

标签: sas teradata


【解决方案1】:

您可以使用 LIBNAME 语句连接到 Terdata

libname mylib TERADATA .... ;

或 PROC SQL 中的 CONNECT 语句。

proc sql;
  connect to teradata .... ;

事实上,您甚至可以在您的连接语句中使用之前创建的 LIBNAME 语句中创建的 libref。

libname mylib TERADATA .... ;
proc sql;
  connect using mylib ;

一般来说,我发现使用 PROC APPEND 将数据复制到 Teradata 是最简单的方法。

libname td TERADATA ... ;
libname mysas 'path to where my SAS datasets live';
proc append base=td.target_table data=mysas.source_table force;
run;

如果目标表不存在,则 SAS 将创建它。 (在这种情况下要小心,因为您可能不希望默认变量类型或将以这种方式创建的主索引。)。

【讨论】:

  • 感谢您的回答,汤姆。然后,当我创建一个 libname mylib TERADATA 时,这应该是我在 Teradata 中调用我的表时需要添加的内容:select * from mylib.table,不应该吗?
  • 是的。请注意,在 libname 中,您将连接到 teradata 服务器上的特定数据库。所以名称 TABLE 将是该数据库中表的名称。您在 SAS 中用于 libref 的名称限制为 8 个字符,但 Teradata 中的数据库名称可能比这更长。因此,当直接在 Teradata 中运行代码时(通过 SQL 助手或使用 SAS 的 passthru 代码),您应该使用数据库名称 (somedb.table) 而不是您发明的用于 libname 语句的 SAS libref (mylib.table)。跨度>
  • 有什么方法可以知道我正在使用的数据库吗?我没有关于我的锻炼的信息
  • 您可能为您的帐户分配了一个默认数据库。因此,在 Teradata 中,您可以只为表使用一级名称。使用 SAS libref 时,只需将其作为一级名称的前缀。
  • 不确定这是否能回答您的问题,但您可以在 SQL 助手中运行几个 SQL 请求以获取更多信息:HELP DATABASE <db_name>; 将为您提供对象列表(表、视图、宏.. .) 在给定的数据库中; SELECT DATABASE; 将为您提供该会话的当前默认数据库。因此,如果您运行SELECT * FROM MyTable,它将使用您的默认数据库限定MyTable
猜你喜欢
  • 2020-01-21
  • 2015-04-28
  • 2021-08-21
  • 2020-09-01
  • 2016-11-03
  • 2015-05-31
  • 2013-05-29
  • 2015-01-31
  • 2020-11-04
相关资源
最近更新 更多