将数据作为列表加载到 Netezza 非常慢

Posted

技术标签:

【中文标题】将数据作为列表加载到 Netezza 非常慢【英文标题】:Loading data to Netezza as a list is very slow 【发布时间】:2016-05-29 17:10:49 【问题描述】:

我想写入 Netezza 表的列表中有大约百万条记录。我一直在使用带有pyodbc的executemany()命令,这似乎很慢(如果我将记录保存到Excel并从excel文件加载到Netezza,我可以加载得更快)。有没有更快的替代方法来使用 executemany() 命令加载列表?

PS1:列表是由我们公司专有的 DAG 生成的,所以写入列表非常快。

PS2:我还尝试将 executemany() 循环成块,每个块包含一个包含 100 条记录的列表。加载大约需要 60 秒,这似乎很慢。

【问题讨论】:

注意答案here。 【参考方案1】:

在 Python 中,我使用瞬态外部表将数百万行加载到 Netezza 时表现出色。基本上,Python 在本地机器上创建一个 CSV 文件,然后告诉 ODBC 驱动程序将 CSV 文件加载到远程服务器中。

最简单的例子:

SELECT * 
FROM EXTERNAL '/tmp/test.txt'
SAMEAS test_table 
USING (DELIM ',');

在幕后,这相当于 nzload 命令,但它不需要 nzload。这在我没有 nzload 的 Windows 上非常有用。

警告:请注意 CSV 的格式、CSV 中的值以及命令的选项。 Netezza 会为无效值提供晦涩的错误消息。

【讨论】:

【参考方案2】:

Netezza 适合批量加载,其中 executeMany() 一次插入行数。加载数百万行的最佳方式是“nzload”实用程序,它可以通过 vbscript、Windows 中的 Excel 宏或 Linux 中的 Shell 脚本来调度。

【讨论】:

以上是关于将数据作为列表加载到 Netezza 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

将带日期的文件加载到 netezza

即使在批处理执行模式下,Netezza 批处理插入也非常慢

如何通过 Python 脚本使用 NZ Loader (Netezza Loader)?

Netezza 从 SQL Server 加载表

Netezza 存储过程 DB_NAME 作为参数

将一个表的数据加载到驻留在不同数据库中的另一个表中 - Netezza