2016-04-26 11 views
2

Ich versuche, eine Teradata UDF (benutzerdefinierte Funktion) in einem impliziten SQL-SQL verwenden, die die Verbindung zu Teradata mit LIBNAME-Anweisung.Assure, dass die Funktion PTY_DECRYPT und ist definiert in einer Datenbank namens TEST in Teradata. Der Zweck dieser Funktion besteht darin, Werte in einer Spalte einer Sicht in Teradata zu entschlüsseln.Verwenden einer Teradata-UDF in SAS Implizite Sql-Pass Thru

Was funktioniert, ist die Verwendung der UDF in einer expliziten SQL. Ich verwende die Funktion für eine Spalte namens SSN_NBR in einer Ansicht namens V_TEST_PERS in der Datenbank namens SAMPLE.

Explcit 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; 

Aber ich möchte die gleiche Funktion in einer impliziten SQL verwenden, aber es funktioniert nicht. Irgendwelche Ideen, wie man es in einer Implicit Sql mit minimalen Änderungen im Implicit SQL arbeiten lassen kann?

Implizite 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; 

Antwort

1

In Ihrem impliziten SQL verweisen Sie auf die Ansicht mit der LIBNAME alias TD, aber wenn Sie die UDF verweisen Sie nicht Aliasing die TEST Datenbank, um die UDF mit dem LIBNAME alias enthält. Syntaktisch ist das möglicherweise nicht in SAS möglich. (ZB TD.TEST.PTY_DECRYPT() - in der Tat würde ich nicht erwarten, dass dies funktioniert)

Die UDF müssen so in SYSLIB oder TD_SYSFNLIB platziert werden, dass es in einem Standardsuchpfad für die Datenbank-Optimierer die UDF zu finden, ohne vollständig zu sein qualifiziert. (z. B. TD_WEEK_BEGIN()) Alternativ könnte die UDF in der Datenbank SAMPLE platziert werden, aber das verletzt wahrscheinlich, wie UDFs in Ihrer Umgebung verwaltet werden, so wie es in meiner Umgebung der Fall wäre.

Andernfalls könnte der UDF-Aufruf in eine Sicht auf die Datenbank eingebettet werden. Dann müssen jedoch andere Probleme mit der Sicherheit dieser Spalte berücksichtigt werden, wenn Ihre Umgebung keine Sicherheit auf Spaltenebene für Ansichten gewährt, die verschlüsselte Daten enthalten Elemente. (z. B. PHI, PII usw.) Ohne einen Sicherheitsmechanismus auf Zeilenspaltenebene, um dynamisch die Fähigkeit eines Benutzers zu filtern, die Spalte zu sehen, die Sie in der Ansicht entschlüsseln, wird das UDF nicht in die Ansicht eingefügt.