如何通过 Python 脚本使用 NZ Loader (Netezza Loader)?
Posted
技术标签:
【中文标题】如何通过 Python 脚本使用 NZ Loader (Netezza Loader)?【英文标题】:How to use NZ Loader (Netezza Loader) through Python Script? 【发布时间】:2013-03-23 22:45:33 【问题描述】:我有一个包含数百万条记录的巨大 csv 文件,我想使用 python 脚本将它加载到 Netezza DB 我尝试过简单的插入查询,但速度非常慢。 可以指点我一些示例 python 脚本或一些想法我该怎么做?
谢谢
【问题讨论】:
等等...您正在尝试针对 Netezza 执行单个插入语句??只需使用 nzload 命令行并从您的 python 脚本中输出它... 你知道我该怎么做吗?甚至我需要从命令行或 shell 运行 nzload,因为我只安装 aginity 工作台来连接到 netezza 数据库,我还需要其他什么来运行 nzload? 【参考方案1】:如果您安装了 Netezza 管理工具,则可以对 nzload
进行 shell 调用。
类似这样的:
os.system("nzload -host myhost -u myuser -pw mypassword -db MYDB -t MYTABLE -skipRows 1 -nullValue NULL -quotedValue DOUBLE -df \"C:\\myinputfile.txt\" -delim \"|\" -dateDelim \"-\" -lf c:\\logs\\nzload.log -bf c:\\logs\\nzloadbad.log")
另请参阅:Calling an external command in Python
【讨论】:
【参考方案2】:你可以使用nz_load4来加载数据,这是支持工具/nz/support/contrib/bin
语法与nzload相同,默认情况下nz_load4将使用4个线程加载数据,您可以使用-tread选项达到32个线程 有关更多详细信息,请使用 nz_load4 -h
这将根据线程数创建日志文件,如
【讨论】:
【参考方案3】:你需要在你想要运行 nzload 的机器上安装 nzcli - 你的系统管理员应该能够把它放在你的 unix/linux 应用服务器上。有一个详细的过程来设置它,缓存密码等 - 系统管理员应该能够做到这一点。
设置完成后,您可以创建 NZ 控制文件以指向您的数据文件并执行加载。 Netezza 数据加载指南详细说明了如何执行所有这些操作(可通过 IBM 获得)。
如果您有 CREATE EXTERNAL TABLE 权限,您也可以通过 aginity 执行此操作 - 您可以执行 INSERT INTO FROM EXTERNAL ... REMOTESOURCE ODBC
从 ODBC 连接加载文件。
【讨论】:
我已经使用 INSERT INTO FROM EXTERNAL ... REMOTESOURCE ODBC 加载它为 1000 条记录工作的数据,但是当我尝试使用来自 aginity 的相同命令加载 7,00,000 条记录时,它给了我错误 [08S01] 通信链路故障。知道可能是什么问题吗? Aginity 时不时会遇到这种情况。我认为这可能与 Netezza 中用户 ID 的最大查询时间设置有关,但我真的不知道。也许尝试使用一点 C# 或 powershell 命令行脚本来针对 ODBC 连接执行 SQL 语句,看看它是否仍然给出该错误? 我使用 pyodbc 库对 python 脚本进行了同样的尝试,但得到了同样的错误。我不知道如何尝试使用 powershell 命令行以及如何安装它。 好吧,如果它在pyodbc 中失败,则可能是NZ DB 和您的服务器之间的连接有问题。也许您可以尝试拆分文件并查看在失败之前可以加载多少?可能是时候给您的 DBA 或 IBM 打电话了。 我通常为此使用 nzload CLI。创建一个空表,然后使用 nzload 插入。由于您的问题已经得到解答,我建议您接受它,因为这就是网站的运作方式。以上是关于如何通过 Python 脚本使用 NZ Loader (Netezza Loader)?的主要内容,如果未能解决你的问题,请参考以下文章
配置 nz-table 表单页脚总页数与条数显示 - Angular
如何使用PySimpleGUI通过有效的python脚本构建GUI
如何使用 Python 将标准输入/标准输出通过管道传输到 Perl 脚本
如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?