Netezza 流式处理结果集

Netezza Streaming ResultSet

我遇到了内存问题,因为我正试图从 Netezza 数据库中读取一个巨大的结果集。 Netezza 是否像 MySQL 那样支持任何类型的 "streaming" 结果集?如果不是,是否可以像这样限制获取大小?:

stmt.setFetchSize(50); 
conn.setAutoCommitMode(false);

从关注 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

"You can place a limit on the number of rows a query can return and thus restrict resources for large result sets. Specifying a rowset limit when you create a user or a group automatically limits the rows that are returned so that users do not have to append a limit clause to their SQL queries."

如果你想拉取行存储在一个文件中,那么最好的办法是使用远程外部 table。

这是一个在 JDBC 上创建瞬态远程外部 table 的示例。这将调用 JDBC 驱动程序提供的批量 export/load 功能,并创建一个竖线分隔的文本文件。

create external table 'c:\mytest.txt' 
USING (DELIMITER '|' REMOTESOURCE 'JDBC' ) as
select *
from table1;

您可以使用 conn.createStatement().execute 调用它,并且您可能必须将文件规范更改为 c:\mytest.txt 以转义现有的反斜杠。

您可以在 documentation here.

中阅读有关外部 table 的更多信息

顺便说一句,你可以使用setFetchSize。不过,我不确定它能否解决您的记忆问题。