我有一个场景,我需要从数据库A的Teradata表中选择数据。使用该结果集填充SQL Server临时表。该临时表需要与基本SQL Server表联接。此结果集需要导出到另一个数据库表。需要在SAS企业指南中做到这一点
到目前为止,这是我的做法, 首先创建SAS数据集
步骤1
proc sql;
connect to teradata(user="abc" pw="def" database=cust fast load=yes mode=Teradata);
create table tmp_result as
select from connection to teradata
(
SELECT
Cust_id,
Name,
Product
FROM Teradata table where ProductId=10
)DISCONNECT FROM TERADATA;
QUIT;
STEP 2
proc sql;
connect to odbc(dsn=temp user="abc" pw="def" connection=shared);
create table ##tmp
(
Cust_id int
Name varchar(100),
Product varchar(50);
)disconnect from ODBC;
QUIT;
将第3个数据从第一个SAS数据集中插入到临时表中
步骤4 -从下面的选择查询中创建基本的sql server表
SELECT *
FROM base sql server table join temp table (above temp table)
步骤5 再次从上述第4步结果集中创建一个sas数据集,然后在最后一步
步骤6 将步骤5的结果集插入到Teradata表数据库B中。
我的方法需要帮助。.我仍在研究此解决方案,但如果我的方法正确,则需要您的意见
先谢谢了。
答案 0 :(得分:0)
您可以通过为数据库定义libname来执行隐式sql传递。
//Fill a variable with x,y,z coordinates with a boolean value that is false.
var locations = {};
for (var x = 1; x <= 4; x++) {
locations[x] = {};
for (var y = 1; y <= 4; y++) {
locations[x][y] = {};
for (var z = 1; z <= 4; z++) {
locations[x][y][z] = false;
}
}
}
//Set 4 values on the X axis to true for testing
locations[1][2][3] = true;
locations[2][2][3] = true;
locations[3][2][3] = true;
locations[4][2][3] = true;
//Set 4 values on the Z axis to true for testing
locations[1][2][1] = true;
locations[1][2][2] = true;
locations[1][2][3] = true;
locations[1][2][4] = true;
//Test if there are 4 on a row - note this can be done more efficient with a bit more thought and does not work for diagonals
var winX = false;
var winY = false;
var winZ = false;
for (var x = 1; x <= 4; x++) {
for (var y = 1; y <= 4; y++) {
for (var z = 1; z <= 4; z++) {
if(locations[x][y][z]) {
//check X for current position
if(locations[1][y][z] && locations[2][y][z] && locations[3][y][z] && locations[4][y][z]) {
winX = true;
}
//check Y for current position
if(locations[x][1][z] && locations[x][2][z] && locations[x][3][z] && locations[x][4][z]) {
winY = true;
}
//check Z for current position
if(locations[x][y][1] && locations[x][y][2] && locations[x][y][3] && locations[x][y][4]) {
winZ = true;
}
}
}
}
}
//Log the results, should return true for X and Z and false for Y
console.log("Win X: " + winX);
console.log("Win Y: " + winY);
console.log("Win Z: " + winZ);
答案 1 :(得分:0)
取决于数据量从Teradata导出,您将希望TPT=NO FASTEXPORT=YES
或TPT=YES FASTEXPORT=YES
利用传统的FastExport或Teradata Parallel Transporter Export运算符。如果在您的SAS环境中安装了TPT,则后者要比前者更好。将数据推回Teradata,将FASTEXPORT
替换为FASTLOAD
,或者根据可用的数据量和TPT,考虑使用流运算符的TPT=YES MULTISTMT=YES
。
您的方法将取决于此SAS工作流程必须运行的频率,将有多少用户运行此工作流程,在数据库和SAS环境之间移动的数据量以及每个数据库平台是否都可以使用SAS / Access接口。
希望这会有所帮助。