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

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

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

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

【问题讨论】:

  • 注意答案here

标签: python list pyodbc netezza executemany


【解决方案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 脚本来调度。

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多