我看到很多將CSV導入PostgreSQL數據庫的示例,但我需要的是將500,000個CSV導入到單個PostgreSQL數據庫中的有效方法。每個CSV有點超過500KB(總共大約272GB的數據)。將大量csv文件導入到PostgreSQL中的有效方法db
CSV的格式相同且沒有重複記錄(數據是從原始數據源以編程方式生成的)。我一直在尋找並將繼續在線搜索選項,但是我希望能夠以最有效的方式完成此任務的任何方向。我對Python有一些經驗,但會深入研究其他任何似乎都適合的解決方案。
謝謝!
我看到很多將CSV導入PostgreSQL數據庫的示例,但我需要的是將500,000個CSV導入到單個PostgreSQL數據庫中的有效方法。每個CSV有點超過500KB(總共大約272GB的數據)。將大量csv文件導入到PostgreSQL中的有效方法db
CSV的格式相同且沒有重複記錄(數據是從原始數據源以編程方式生成的)。我一直在尋找並將繼續在線搜索選項,但是我希望能夠以最有效的方式完成此任務的任何方向。我對Python有一些經驗,但會深入研究其他任何似乎都適合的解決方案。
謝謝!
你在那裏有很好的數據。我對Postgre並不十分確定,但至少MySQL提供了一些SQL命令,可以將csv直接提供給一個表。這繞過了任何插入檢查等等,並且因此比任何普通的插入操作快一個數量級以上。
所以去的大概最快的方法是創建一些簡單的Python腳本,告訴你postgre服務器,它的CSV文件中,以如飢似渴地吞食到它的無休止的表。
如果您通過閱讀PostgreSQL guide "Populating a Database"你會看到幾條建議開始:
COPY
。PostgreSQL的COPY
statement已經支持CSV格式:
COPY table (column1, column2, ...) FROM '/path/to/data.csv' WITH (FORMAT CSV)
,所以它看起來就好像你是最好關閉不使用Python所有,或使用Python只產生COPY
報表所需的序列。
Gareth - 我從你的回答中假設你不能在Copy語句中使用通配符?從我所知道的,我需要一些類型的編程方法來創建文件列表,然後發出單獨的複製命令。如果我錯了,請糾正我。我希望我是:)。如果我可以發出帶有通配符的複製語句,就會容易得多* .csv – FredG
確實生成「COPY」命令序列很容易?例如:'(用於FILE中的/path/to/*.csv;執行echo「COPY表(column1,column2,...)FROM'$ FILE'WITH(FORMAT CSV);」;完成)> import-commands.sql' –
這是不是有點低效?用500,000個複製命令生成一個文件? – FredG
我使用PHP和Postgres,和閱讀用PHP csv文件,並以下列格式騎字符串:字符串參數傳遞給PostgreSQL函數在一個事務
{ {line1 column1, line1 column2, line1 column3} , { line2 column1,line2 column2,line2 column3} }
護理。
我可以檢查所有記錄,格式,數據量等,並在大約3分鐘內獲得導入500,000條記錄的結果。
PostgreSQL裏的函數讀取的數據:
DECLARE
d varchar[];
BEGIN
FOREACH d SLICE 1 IN ARRAY p_dados
LOOP
INSERT INTO schema.table (
column1,
column2,
column3,
)
VALUES (
d[1],
d[2]::INTEGER, -- explicit conversion to INTEGER
d[3]::BIGINT, -- explicit conversion to BIGINT
);
END LOOP;
END;
將數據導入到PostgreSQL的最快的方法是使用'COPY'命令。 –