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 存储过程