0

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

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

流量:

  1. 存储过程将在 SQL Server 上创建临时表
  2. 这些将被发送到 Netezza 以加入事实表
  3. 将在 Netezza 中进行计算
  4. 结果将传回 SQL Server

将临时表从 SQL Server 传递到 Netezza 的方法有哪些?

谢谢

4

1 回答 1

1

我所知道的将数据输入和输出 Netezza 的唯一方法是通过平面文件,或者使用 ODBC 驱动程序直接与 Netezza 一起工作并在内存中保存一个记录集并通过 odbc 连接写入 Netezza。

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

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

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

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

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

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

Netezza 用户指南

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

堆栈帖子

我最终使用该帖子中的一些内容构建了以下方法来针对 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 -

于 2012-11-11T13:45:55.007 回答