Netezza 流式处理结果集
Posted
技术标签:
【中文标题】Netezza 流式处理结果集【英文标题】:Netezza Streaming ResultSet 【发布时间】:2016-02-23 18:40:48 【问题描述】:我遇到了内存问题,因为我试图从 Netezza 数据库中读取一个巨大的 ResultSet。 Netezza 是否像 mysql 那样支持任何类型的“流式传输”结果集?如果没有,是否会像这样限制获取大小?:
stmt.setFetchSize(50);
conn.setAutoCommitMode(false);
【问题讨论】:
您打算在收到数据后如何处理? 【参考方案1】:如果您想提取行以存储在文件中,那么最好的办法是使用远程外部表。
这是一个通过 JDBC 创建临时远程外部表的示例。这将调用 JDBC 驱动程序提供的批量导出/加载功能,并创建一个管道分隔的文本文件。
create external table 'c:\mytest.txt'
USING (DELIMITER '|' REMOTESOURCE 'JDBC' ) as
select *
from table1;
您可以使用 conn.createStatement().execute 调用它,并且您可能必须将文件规范更改为 c:\mytest.txt 以转义现有的反斜杠。
您可以在documentation here 中阅读有关外部表的更多信息。
顺便说一句,您可以使用 setFetchSize。不过,我不确定它是否能解决您的内存问题。
【讨论】:
除了如上所述导出到文件之外,Netezza 没有像 MySQL 那样提供任何“流式”结果集选项,对吗?【参考方案2】:从以下 URL,您可以获取有关 ROWSET_LIMIT 的信息,使用此变量设置,您可以将查询结果限制为您的要求并根据需要创建流 - https://www-01.ibm.com/support/knowledgecenter/SSULQD_7.1.0/com.ibm.nz.adm.doc/c_sysadm_user_rowset_limits.html?lang=en
“您可以限制查询可以返回的行数,从而限制大型结果集的资源。在创建用户或组时指定行集限制会自动限制返回的行,以便用户执行不必在他们的 SQL 查询中附加限制子句。”
【讨论】:
恐怕这不是我真正想要的。我不想对结果设置限制并手动创建流。正在寻找使用批量提取大小或类似方法的更自然的解决方案。以上是关于Netezza 流式处理结果集的主要内容,如果未能解决你的问题,请参考以下文章