我想写入 Netezza 表的列表中有大约百万条记录。我一直在使用带有pyodbc的executemany()命令,这似乎很慢(如果我将记录保存到Excel并从excel文件加载到Netezza,我可以加载得更快)。使用 executemany() 命令加载列表是否有更快的替代方法?
PS1:列表是我们公司专有的DAG生成的,所以写入列表非常快。
PS2:我还尝试将 executemany() 循环成块,每个块包含一个包含 100 条记录的列表。加载大约需要 60 秒,这似乎很慢。
我想写入 Netezza 表的列表中有大约百万条记录。我一直在使用带有pyodbc的executemany()命令,这似乎很慢(如果我将记录保存到Excel并从excel文件加载到Netezza,我可以加载得更快)。使用 executemany() 命令加载列表是否有更快的替代方法?
PS1:列表是我们公司专有的DAG生成的,所以写入列表非常快。
PS2:我还尝试将 executemany() 循环成块,每个块包含一个包含 100 条记录的列表。加载大约需要 60 秒,这似乎很慢。
在 Python 中,我使用瞬态外部表将数百万行加载到 Netezza 时表现出色。基本上,Python 在本地机器上创建一个 CSV 文件,然后告诉 ODBC 驱动程序将 CSV 文件加载到远程服务器中。
最简单的例子:
SELECT *
FROM EXTERNAL '/tmp/test.txt'
SAMEAS test_table
USING (DELIM ',');
这在幕后相当于 nzload 命令,但它不需要 nzload。这在我没有 nzload 的 Windows 上非常有用。
警告:注意 CSV 的格式、CSV 中的值以及命令的选项。Netezza 会为无效值提供晦涩的错误消息。
Netezza 适用于批量加载,其中 executeMany() 一次插入行数。加载数百万行的最佳方式是“nzload”实用程序,它可以通过 vbscript、Windows 中的 Excel 宏或 Linux 中的 Shell 脚本来调度。