SQL Server传递表Netezza

时间:2012-04-04 06:35:44

标签: sql-server netezza linked-server

只是想知道什么是最佳实践:

我们有在SQL Server中运行的存储过程,需要使用一个巨大的事实表进行一些计算,以存储在Netezza上。

流程:

  1. 存储过程将在SQL Server上创建临时表
  2. 这些将被发送到Netezza以加入事实表
  3. 计算将在Netezza
  4. 进行
  5. 结果将传递回SQL Server
  6. 有哪些方法可以将临时表从SQL Server传递到Netezza?

    由于

1 个答案:

答案 0 :(得分:1)

我知道将数据输入和输出Netezza的唯一方法是通过平面文件,或使用ODBC驱动程序直接使用Netezza并在记忆中保存记录集并通过odbc连接写入Netezza。 / p>

无论您使用的是Windows还是Unix,Netezza都提供了可用于连接Netezza的客户端工具。 Fyi,不要在互联网上寻找它们。您必须直接从Netezza或管理该关系的人那里获取它们。

我建议我研究如何在SSIS中使用ODBC驱动器为您完成工作。我不是SSIS的专业人员,所以我不能说我会知道怎么做,但我会先调查一下。

如果我必须完成任务,我会用C#写一些东西来执行以下任务。

  • 从sql server创建平面文件
  • 连接到Netezza创建链接到平面文件的外部表。
  • 调用Netezza中的程序来执行工作并生成要在临时表中导出的数据。
  • 将新数据导出到平面文件并将其导回到sql server。

现在我考虑一下你也可以尝试以下方法,但是它未经测试。我想知道你是否可以在sql server中创建一个链表,在Netezza中创建一个使用相同平面文件的外表。如果可以,可以使用文件锁,可以从sql server创建到netezza的准链接。

要了解有关netezza中外部表的更多信息。请查看第5章中的文档Netezza用户指南。

Netezza User Guide

此外,如果您对编码方面感兴趣,下面有一个非常好的链接,如何通过c#连接到netezza。

Stack Post

我最终使用了一些帖子来构建下面的方法来执行针对Netezza的命令。

OdbcDataReader GetReaderForCommand(string strCmd, string dbname)
{

    var conn = new OdbcConnection();
    conn.ConnectionString = "Driver={NetezzaSQL};servername=<servername>;port=5480;database="+dbname+"; username=<username>;password=<pwd>;";

    OdbcDataReader rdr = null;


        conn.Open();
        System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(strCmd, conn);
        rdr = cmd.ExecuteReader();
        return rdr;


}

最后,这里有几个我会跟进的链接。

enzeecommunity.com - 用户群搜索和提问。

与Netezza一起使用的免费管理工作室。

http://www.aginity.com/ProductivityTools/WorkbenchOverview.aspx -