2013-03-23 18 views
2

我有一個巨大的csv文件,其中包含數百萬條記錄,我想使用python腳本將它加載到Netezza DB中我試過簡單的插入查詢,但它非常慢。 可以給我一些例子python腳本或一些想法我怎麼能做到這一點?如何通過Python腳本使用NZ Loader(Netezza Loader)?

謝謝

+0

等待......您正試圖針對Netezza執行單個插入語句?只需使用nzload命令行並將其從您的python腳本中釋放出來... – 2013-03-25 20:31:26

+0

您知道我該怎麼做?甚至我需要從命令行或shell運行nzload,因爲我只安裝了aginity workbench來連接到netezza數據庫,我還需要其他什麼來運行nzload嗎? – Dhams 2013-03-26 16:21:33

回答

0

你需要得到安裝要nzload運行,從機器上的nzcli - 你的系統管理員應該可以把它放在你的Unix/Linux應用服務器上。有一個詳細的過程來設置它,緩存密碼等 - 系統管理員應該能夠做到這一點。

設置完成後,您可以創建NZ控制文件以指向您的數據文件並執行加載。 Netezza Data Loading指南詳細介紹瞭如何完成所有這些(可以通過IBM獲得)。

如果您有CREATE EXTERNAL TABLE privledge,則可以通過aginity來完成 - 您可以執行INSERT INTO FROM EXTERNAL ... REMOTESOURCE ODBC從ODBC連接加載文件。

+0

我已經使用INSERT INTO FROM EXTERNAL ... REMOTESOURCE ODBC來加載它爲1000條記錄工作的數據,但是當我試圖從aginity使用相同命令加載7,00,000條記錄時,它給我錯誤[08S01]通信鏈路故障。任何想法可能是什麼問題? – Dhams 2013-04-01 22:24:24

+0

我曾經與Aginity偶爾發生過這種事。我認爲這可能是Netezza中用戶ID的最大查詢時間設置,但我不知道。也許嘗試用一個小小的C#或PowerShell命令行腳本來執行對ODBC連接的SQL語句,看看它是否仍然給出這個錯誤? – 2013-04-02 12:01:23

+0

我用python腳本使用pyodbc庫嘗試了同樣的事情,但得到相同的錯誤。我不知道如何嘗試使用PowerShell命令行,以及如何安裝它。 – Dhams 2013-04-02 14:25:58

3

如果您安裝了Netezza Admin Tools,您可以撥打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

1

可以使用nz_load4加載數據,這是支持實用程序/新西蘭/支持/ contrib/bin下

的語法與nzload相同,默認情況下,nz_load4將使用4線程加載數據,並且您可以使用-tread選項 來使用nz_load4 -h

這將創建基於線程數量的日誌文件,就像如果