【问题标题】:Using a Teradata UDF in SAS Implicit Sql Pass Thru在 SAS 隐式 Sql Pass Thru 中使用 Teradata UDF
【发布时间】:2016-08-20 14:50:26
【问题描述】:

我正在尝试在 SAS 隐式 SQL 中使用 Teradata UDF(用户定义函数),该 SQL 使用 LIBNAME 语句建立与 Teradata 的连接。假设该函数称为 PTY_DECRYPT 并在 Teradata 中称为 TEST 的数据库中定义。此函数的目的是解密 Teradata 中视图列中的值。

有效的是在显式 Sql 中使用 UDF。下面我在名为 SAMPLE 的数据库中名为 V_TEST_PERS 的视图中使用名为 SSN_NBR 的列上的函数。

显式 Sql:

Options  debug=DBMS_TIMERS sastrace=',,,d'
sastraceloc=saslog no$stsuffix fullstimer;


Proc Sql;
Connect to TERADATA(User=XXXXX pwd=XXXXX server=XXXXX);
Create Table Final as
select  *  from connection to teradata
(
Select
sub_id, 
SSN_NBR,
TEST.PTY_DECRYPT(SSN_NBR,'T_ssn_test',400,0,0 ) as SSN_NBR_Decrypt
from SAMPLE.V_TEST_PERS
);
disconnect from teradata;
Quit;

但我想在隐式 SQL 中使用相同的函数,但它不起作用。关于如何使其在隐式 Sql 中工作且对隐式 SQL 进行最小更改的任何想法?

隐式 Sql

Options  debug=DBMS_TIMERS sastrace=',,,d'
sastraceloc=saslog no$stsuffix fullstimer;

Libname Td Teradata  User=XXXXX pwd=XXXXX server=XXXXX database=SAMPLE ;

Proc sql;
Create  table Final as
select
sub_id, 
SSN_NBR,
TEST.PTY_DECRYPT(SSN_NBR,'T_ssn_test',400,0,0 ) as SSN_NBR_Decrypt

from Td.V_TEST_PERS;
Quit;

【问题讨论】:

    标签: sql sas teradata user-defined-functions


    【解决方案1】:

    在您的隐式 SQL 中,您使用 LIBNAME 别名 TD 引用视图,但是当您引用 UDF 时,您不会使用 LIBNAME 别名为包含 UDF 的 TEST 数据库添加别名。从语法上讲,您可能无法在 SAS 中做到这一点。 (例如TD.TEST.PTY_DECRYPT() - 事实上我不希望这会起作用)

    UDF 可能需要放在SYSLIBTD_SYSFNLIB 中,以便数据库优化器在默认搜索路径中找到未完全限定的UDF。 (例如TD_WEEK_BEGIN())或者,可以将 UDF 放置在数据库 SAMPLE 中,但这可能会违反 UDF 在您的环境中的维护方式,就像在我的环境中一样。

    否则,UDF 调用可以嵌入到数据库的视图中,但是如果您的环境未在列级别为包含加密数据元素的视图授予安全性,那么您需要考虑该列的安全性问题. (例如 PHI、PII 等)如果没有适当的行列级安全机制来动态过滤用户在视图中查看您正在解密的列的能力,那么将 UDF 放入视图中是行不通的。

    【讨论】:

      【解决方案2】:

      我在 SAS 社区论坛上问了同样的问题,我很高兴地说我确实找到了解决这个问题的方法。

      请看下面的链接:

      https://communities.sas.com/t5/Base-SAS-Programming/Using-a-Teradata-UDF-in-SAS-Implicit-Sql-Pass-Thru/m-p/266850/highlight/false#M52685

      【讨论】:

      • 有趣的解决方法。聪明的。惊讶于使用 ORDER BY 1 让它工作。
      猜你喜欢
      • 2016-06-24
      • 2015-05-11
      • 2022-01-12
      • 2015-07-25
      • 2015-10-21
      • 1970-01-01
      • 2020-12-30
      • 2018-09-02
      • 2018-08-21
      相关资源
      最近更新 更多