将数据作为列表加载到 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 非常慢的主要内容,如果未能解决你的问题,请参考以下文章