【问题标题】:Run query on sql server through teradata and store result in teradata通过 teradata 在 sql server 上运行查询并将结果存储在 teradata
【发布时间】:2014-12-20 07:13:10
【问题描述】:

我在 SQL server 中有一个表,在 Teradata 中有 5 个表。我想将 teradata 中的这 5 个表与 sql server 表连接起来,并将结果存储在 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)

【问题讨论】:

  • 我可能对此有误,但我相信您需要将SELECT DISTINCT store from SQLSERVERTABLE 的结果导入 Teradata,以便在查询中使用它。

标签: sql-server teradata


【解决方案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 助手从文本导入,方法是转到文件并选择导入。然后执行以下操作并导航到您的文件。

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

插入数据后,您只需引用表名即可对其进行查询。

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

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

编辑: 如果您多次执行此操作,您可以使用脚本执行此操作,这是 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.

【讨论】:

    【解决方案2】:

    是否可以通过 ODBC 从 Sql Server 获取数据?

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

    为了允许在单个选择语句中使用位于不同数据库环境(在您的情况下为 SQL-Server 和 Teradata)中的表,Teradata 最近发布了Teradata Query Grid。但我不确定对 SQL-Server 的确切支持水平,而且要完成这项简单的工作会涉及许可问题和相当长的学习曲线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2019-07-11
      • 2014-09-13
      • 1970-01-01
      • 2017-09-30
      • 2020-06-04
      相关资源
      最近更新 更多