将 SAS 数据连接到 Teradata table
Joining SAS data to a Teradata table
使用:SAS Enterprise Guide 7.13
OBJECTIVE:我正在尝试使用 SAS EG 将 SAS table 内部连接到 Teradata 中的 table,而不使用子查询。
注意:除了 Teradata 中的 volatile tables,我没有写权限。
我当前的以下方法产生了以下错误。
错误:Teradata 准备:数据库“&USDomID.E”不存在。
使用与 Teradata 的连接创建 XREF_CAK table 时发生错误。
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=DWPROD2 CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
CREATE TABLE xin AS
SELECT DISTINCT
&xref_cak. AS XREF_CAK,
adjdctn_dt
FROM
&datain.;
QUIT;
LIBNAME &USDomID.E TERADATA USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL DBMSTEMP=YES TPT=NO MODE=TERADATA;
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
%dropvts(myxref)
QUIT;
PROC SQL;
PROC APPEND DATA=xin BASE=&USDomID.E.myxref (TPT=NO MULTISTMT=YES);
RUN;
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
CREATE TABLE XREF_CAK AS
SELECT *
FROM CONNECTION TO TERADATA (
SELECT
CLM_SOR_CD,
CLM_ADJSTMNT_KEY,
SRC_SBSCRBR_ID,
SRC_MBR_SQNC_NBR,
CONCAT('SCCF ',CLM_ITS_SCCF_NBR) AS CLM_ITS_SCCF_NBR_FORMATTED, CAST(CLM_ITS_SCCF_NBR_FORMATTED AS varchar(35)),
CASE
WHEN CLM_SOR_CD ='822' THEN 'AC'
WHEN CLM_SOR_CD ='823' THEN 'CF'
WHEN CLM_SOR_CD ='869' THEN 'CH'
WHEN CLM_SOR_CD ='809' THEN 'CS'
WHEN CLM_SOR_CD ='824' THEN 'NA'
WHEN CLM_SOR_CD ='808' THEN 'WG'
WHEN CLM_SOR_CD ='889' THEN 'VAITS'
ELSE CLM_SOR_CD
END AS SOR_CD_TXT,CAST(SOR_CD_TXT AS varchar(5)),
CONCAT(SOR_CD_TXT,',',SRC_SBSCRBR_ID,',',SRC_MBR_SQNC_NBR,',',CLM_ITS_SCCF_NBR_FORMATTED) AS XREF_CAK_CONCAT, CAST(XREF_CAK_CONCAT AS varchar(100))
FROM EDW_ALLPHI.CLM
INNER JOIN
&USDomID.E.myxref x on
x.XREF_CAK = c.clm_adjstmnt_key and
x.adjdctn_dt = c.adjdctn_dt
);
DISCONNECT FROM TERADATA;
QUIT;
终于成功了。下面的代码适用于任何有同样问题的人。关键是使用 DBMSTEMP=YES TPT=No included
正确设置 libname
%let ID=%scan(%qsysfunc(dequote(&tuserid)), 1, @);
/*set Teradata connection libref*/
libname &ID. teradata user="%qsysfunc(dequote(&tuserid))" password="%qsysfunc(dequote(&tpswd))" TDPID=XXXX connection=global DBMSTEMP=YES TPT=No MODE=TERADATA SCHEMA=XXXX;
DATA MY_XREF_SAS;
SET &datain.;
RUN;
/*loads unique XREF_CAKs set into Teradata*/
DATA &ID..MY_XREF (MULTISTMT=YES);
SET &datain.;
RUN;
PROC SQL FEEDBACK;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=XXXXX CONNECTION=GLOBAL MODE=TERADATA SCHEMA=XXXXX);
Create Table XREF as SELECT * FROM CONNECTION TO TERADATA(
SELECT
c.COL1,
c.COL2,
c.COL3,
c.COL4,
CONCAT('SCCF ',c.COL5) AS COL5_FORMATTED, CAST(COL5_FORMATTED AS varchar(35))
FROM XXXXX.XXX c
INNER JOIN &ID..MY_XREF x on
x.XREF_CAK = c.clm_adjstmnt_key
);
drop table &ID..MY_XREF;
DISCONNECT FROM TERADATA;
QUIT;
使用:SAS Enterprise Guide 7.13
OBJECTIVE:我正在尝试使用 SAS EG 将 SAS table 内部连接到 Teradata 中的 table,而不使用子查询。
注意:除了 Teradata 中的 volatile tables,我没有写权限。
我当前的以下方法产生了以下错误。 错误:Teradata 准备:数据库“&USDomID.E”不存在。 使用与 Teradata 的连接创建 XREF_CAK table 时发生错误。
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=DWPROD2 CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
CREATE TABLE xin AS
SELECT DISTINCT
&xref_cak. AS XREF_CAK,
adjdctn_dt
FROM
&datain.;
QUIT;
LIBNAME &USDomID.E TERADATA USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL DBMSTEMP=YES TPT=NO MODE=TERADATA;
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
%dropvts(myxref)
QUIT;
PROC SQL;
PROC APPEND DATA=xin BASE=&USDomID.E.myxref (TPT=NO MULTISTMT=YES);
RUN;
PROC SQL;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=xxxx CONNECTION=GLOBAL MODE=TERADATA SCHEMA=EDW_ALLPHI);
CREATE TABLE XREF_CAK AS
SELECT *
FROM CONNECTION TO TERADATA (
SELECT
CLM_SOR_CD,
CLM_ADJSTMNT_KEY,
SRC_SBSCRBR_ID,
SRC_MBR_SQNC_NBR,
CONCAT('SCCF ',CLM_ITS_SCCF_NBR) AS CLM_ITS_SCCF_NBR_FORMATTED, CAST(CLM_ITS_SCCF_NBR_FORMATTED AS varchar(35)),
CASE
WHEN CLM_SOR_CD ='822' THEN 'AC'
WHEN CLM_SOR_CD ='823' THEN 'CF'
WHEN CLM_SOR_CD ='869' THEN 'CH'
WHEN CLM_SOR_CD ='809' THEN 'CS'
WHEN CLM_SOR_CD ='824' THEN 'NA'
WHEN CLM_SOR_CD ='808' THEN 'WG'
WHEN CLM_SOR_CD ='889' THEN 'VAITS'
ELSE CLM_SOR_CD
END AS SOR_CD_TXT,CAST(SOR_CD_TXT AS varchar(5)),
CONCAT(SOR_CD_TXT,',',SRC_SBSCRBR_ID,',',SRC_MBR_SQNC_NBR,',',CLM_ITS_SCCF_NBR_FORMATTED) AS XREF_CAK_CONCAT, CAST(XREF_CAK_CONCAT AS varchar(100))
FROM EDW_ALLPHI.CLM
INNER JOIN
&USDomID.E.myxref x on
x.XREF_CAK = c.clm_adjstmnt_key and
x.adjdctn_dt = c.adjdctn_dt
);
DISCONNECT FROM TERADATA;
QUIT;
终于成功了。下面的代码适用于任何有同样问题的人。关键是使用 DBMSTEMP=YES TPT=No included
正确设置 libname%let ID=%scan(%qsysfunc(dequote(&tuserid)), 1, @);
/*set Teradata connection libref*/
libname &ID. teradata user="%qsysfunc(dequote(&tuserid))" password="%qsysfunc(dequote(&tpswd))" TDPID=XXXX connection=global DBMSTEMP=YES TPT=No MODE=TERADATA SCHEMA=XXXX;
DATA MY_XREF_SAS;
SET &datain.;
RUN;
/*loads unique XREF_CAKs set into Teradata*/
DATA &ID..MY_XREF (MULTISTMT=YES);
SET &datain.;
RUN;
PROC SQL FEEDBACK;
CONNECT TO TERADATA (USER=&tuserid. PASSWORD=&tpswd. TDPID=XXXXX CONNECTION=GLOBAL MODE=TERADATA SCHEMA=XXXXX);
Create Table XREF as SELECT * FROM CONNECTION TO TERADATA(
SELECT
c.COL1,
c.COL2,
c.COL3,
c.COL4,
CONCAT('SCCF ',c.COL5) AS COL5_FORMATTED, CAST(COL5_FORMATTED AS varchar(35))
FROM XXXXX.XXX c
INNER JOIN &ID..MY_XREF x on
x.XREF_CAK = c.clm_adjstmnt_key
);
drop table &ID..MY_XREF;
DISCONNECT FROM TERADATA;
QUIT;