【问题标题】:Getting the Libname from the Teradata Schema从 Teradata Schema 获取 Libname
【发布时间】:2019-01-22 04:51:36
【问题描述】:

我正在使用 SAS 连接到 Teradata。 有时我们需要不同格式的数据库名称。

当我编写 SAS 代码时,我使用 Databasename/Libref,例如:SHORTLIB

当我使用 Teradata 代码时,我的方案如下所示:SCHEMA_A_B_C_0_1_0_0_0_0_0_0

那么如何从 Teradata SCHEMA 获取 Libref?

谢谢。

【问题讨论】:

  • 尝试使用 dictionary.columns 或 dictionary.tables 来获取 libref,据我所知,您无法从 Teradata 架构中获取 libname
  • 您是否尝试从 Teradata 确定 SAS libref?你能澄清一下你的问题吗?
  • @mimi - 你能分享你的 libname 声明吗?这将告诉我们模式是存储在本地还是存储在元数据中。如果是元数据,应该可以使用元数据查询并检查库与匹配模式属性的关联来确定这一点。如果在本地,Stu 关于dictionary.libnames 的建议应该就足够了。

标签: database sas schema teradata


【解决方案1】:

两种选择:

1.

libname _all_ list;

这将在日志中显示所有当前分配的库。

2.

proc sql;
    select *
    from dictionary.libnames;
quit;

这还将向您显示所有当前分配的库以及一些可能相关的不同信息。

【讨论】:

  • 是否还有未分配库的可能性?在大多数情况下,这个答案可以解决我的问题。
  • 你的意思是元数据中自动分配的库,但没有预先分配?
【解决方案2】:

如果您知道自己创建的 libref,则可以查询 DICTIONARY 表(或等效的 SASHELP 视图)以查找有关 libref 指向的架构的信息。

您可以查看SASHELP.VLIBNAM视图,您需要引用的变量是:LIBNAME ENGINE PATH SYSVALUE SYSNAME。

因此,LIBNAME 等于您的 libref 和 SYSNAME 等于“架构/用户”的记录应该是您想要的记录。架构名称将位于 SYSVALUE 变量中。

这是一个指向 SAS 宏的链接,它将完全在宏代码中进行此查询并返回宏变量中的信息。

https://github.com/sasutils/macros/blob/master/dblibchk.sas

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-12-19
    • 2021-06-15
    相关资源
    最近更新 更多