我在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)
答案 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的确切支持程度,这将涉及许可麻烦和相当学习的曲线来完成这项简单的工作。