1

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

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

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

4

2 回答 2

3

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

最简单的例子:

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

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

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

于 2017-10-26T03:16:18.150 回答
0

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

于 2016-02-24T10:39:14.650 回答