SQL Server 传递表 Netezza

Posted

技术标签:

【中文标题】SQL Server 传递表 Netezza【英文标题】:SQL Server passing tables Netezza 【发布时间】:2012-04-04 06:35:44 【问题描述】:

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

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

流程:

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

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

谢谢

【问题讨论】:

【参考方案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 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 -

【讨论】:

以上是关于SQL Server 传递表 Netezza的主要内容,如果未能解决你的问题,请参考以下文章

通过在 SQL Server 2000 中传递变量参数来加入表值函数

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

在 SQL Server 数据库之间传递用户定义的表类型

SQL Server - 将表传递给函数......如何?这是个好主意吗?

传递查询如何在Access中使用SQL Server数据库引擎进行查询