簡體   English   中英

從CSV選擇性導入到MySQL

[英]Selective Import from CSV to MySQL

我如何將某些行從大型csv文件導入到MySQL表中。 我知道如何導入所有數據,但是我的問題是我的csv文件太大,我不需要它具有的所有數據。

我只想導入其中“ COLUMN_X”具有以下兩個值之一的行:[VALID1,VALID2,VALID3]對於column_x,所有其他具有無效值的行都應忽略。

有人可以幫我嗎? 非常感謝。

您無法使用LOAD DATA INFILE過濾掉行,因此可以通過預處理CSV文件來過濾掉這些行,或者將數據加載到臨時表中並將相關行插入到主表中,例如:

CREATE TEMP TABLE import LIKE my_main_table;
LOAD DATA LOCAL INFILE 'myfile.csv' into import;
INSERT INTO my_main_table SELECT * FROM import
                          WHERE column_x IN(VALID1, VALID2, VALID3)

您可以使用類似:

LOAD DATA INFILE 'myfile.csv'
INTO mytable
 (column1, @dummy, @dummy, column2, column3)

它將僅將第1、4和5列加載到數據庫中。 但是您需要提前知道“好”列的位置。

LOAD DATA INFILE 'filename' IGNORE
INTO TABLE `table` (field1, field2, @pk, field3, @columnx)
SET pk = IF (@columnx IN ('VALID1', 'VALID2', 'VALID3'), NULL, 'key'),
    COLUMN_X = @columnx
  • 如果在CSV中找到重復的鍵,則IGNORE忽略行。
  • (field1, field2, @pk, field3, @columnx)是CSV列到值的映射。 具體來說:CVS的第一個字段進入列field1 ,CVS的第二個字段進入列field2 ,CSV的第三字段進入變量@pk等。
  • pk =將名為pk的列設置為=后面的表達式的結果。 在這種情況下,如果在CSV的第五列中遇到有效值之一,則它將pk列設置為NULL 否則,它將該列設置為'key'

如果pk是保存主鍵的列,該表已經具有以'key'作為主鍵的記錄,並且具有主鍵的列設置為auto_increment

注釋到mysql文檔的解決方案:

CREATE TABLE your_table ( .....) 
PARTITION BY LIST (COLUMN_X)
(
   PARTITION main VALUE IN (VALID1, VALID2, VALID3)
);
LOAD DATA INFILE 'your_file.csv' IGNORE INTO your_table .....

如果需要將數據追加到現有表中,則可以創建一個新的臨時表並將數據導入到該表中,如上所述,然后將其INSERT INTO old_table SELECT * FROM your_table ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM