通过teradata在sql server上运行查询,并将结果存储在teradata中

时间:2014-10-24 12:40:41

标签: sql-server teradata

我在SQL服务器中有一个表,在Teradata中有5个表。我想在teradata中使用sql server表连接这5个表,并将结果存储在Teradata表中。

我有sql server名称,但我不知道如何在sql server和teradata上同时运行查询。

我想这样做: sql server表查询

Select distinct store 
from store_Desc

teradata表:

select cmp_id,state,sde 
from xyz 
where store in (
select distinct store 
from sql server table)

2 个答案:

答案 0 :(得分:1)

您可以创建一个表(如果您没有写权限,则创建一个易失性表)来执行此操作。将结果从SQL Server导出为文本或您选择的语言。

CREATE VOLATILE TABLE store_table ( column_1 datatype_1, column_2 datatype_2, ... column_n datatype_n); 您可能需要在之前添加ON COMMIT PRESERVE ROWS;以上取决于您的交易设置。 您可以从一种语言循环下面或执行多次。

INSERT INTO store_table VALUES(value_1, value_2, ..., value_n);

或者您可以使用Teradata SQL Assistant从文本导入,方法是转到“文件”并选择“导入”。然后执行以下操作并导航到您的文件。

INSERT INTO store_table VALUES(?, ?, ..., n);

插入数据后,只需引用表名即可查询。

SELECT cmp_id,state,sde FROM xyz WHERE store IN( SELECT store FROM store_table)

从SQL Server导出时最容易完成DISTINCT函数,以最大限度地减少需要上传的行。

编辑: 如果您这样做很多次,您可以使用脚本执行此操作,这是Python中一个非常简单的示例:

import pyodbc con_ss = pyodbc.connect('sql_server_odbc_connection_string...') crs_ss = con_ss.cursor() con_td = pyodbc.connect('teradata_odbc_connection_string...') crs_td = con_td.cursor() # pull data for sql server data_ss = crs_ss.execute(''' SELECT distinct store AS store from store_Desc ''').fetchall() # create table in teradata crs_td.execute(''' CREATE VOLATILE TABLE store_table ( store DEC(4, 0) ) PRIMARY INDEX (store) ON COMMIT PRESERVE ROWS;''') con_td.commit() # insert values; you can also use an execute many, but this is easier to read... for row in data_ss: crs_td.execute('''INSERT INTO store_table VALUES(?)''', row) con_td.commit() # get final data data_td = crs_td.execute('''SELECT cmp_id,state,sde FROM xyz WHERE store IN( SELECT store FROM store_table);''').fetchall() # from here write to file or whatever you would like.

答案 1 :(得分:0)

是通过ODBC从Sql Server获取数据吗?

最佳选择可能是使用Teradata Parallel Transporter(TPT)从SQL Server获取数据,使用其ODBC运算符(作为生产者)与Load或Update运算符结合使用,将其作为消费者插入到Teradata的中间表中。然后,您必须在Teradata上执行其余操作。对于其余操作,您可以使用BTEQ / SQLA将结果存储在最终的Teradata表中。您也可以将相同的SQL放在TPT的DDL操作符中,而不是BTEQ / SQLA中,并在单个作业脚本中完成。

为了允许在单个select语句中使用驻留在单独数据库环境(在您的SQL-Server和Teradata中)的表,Teradata最近发布了Teradata Query Grid。但是我不确定SQL-Server的确切支持程度,这将涉及许可麻烦和相当学习的曲线来完成这项简单的工作。