2011-07-07 29 views
37

Çok büyük bir .csv dosyası (~ 4gb) mysql içine almaya çalışıyorum. Phpmyadmin'i kullanmayı düşünüyordum, ama sonra maksimum 2mb yükleme boyutuna sahipsin. Birisi bana komut satırını kullanmam gerektiğini söyledi.Komut satırı üzerinden mysql içine bir csv içe aktarma

bunu aktarmak için şu yönergeleri kullanacaktım: http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680

Ne MySQL tablosunda sütun adları olarak .csv tablodaki ilk satır ayarlamak için komut olurdu? Bu seçenek phpmyadmin üzerinden kullanılabilir, bu yüzden onların bir mysql komut satırı sürümü olması gerekir, değil mi? Lütfen bana yardım et. Teşekkür ederim.

-Raj

cevap

84

burada bu komutu

load data local infile 'file.csv' into table table 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(column1, column2, column3,...) 

alanları deneyin veri oturup gereken asıl tablo alanlardır. Çevrelediği ve sonlandırıldı çizgiler isteğe bağlıdır ve eğer yardımcı olabilir Excel dışa aktarma, vb. gibi çift tırnaklarla eklenmiş sütunlar var.

Daha fazla ayrıntı için manual numaralı telefonu ziyaret edin.

İlk satırı tablo sütun adları olarak ayarlamak için, satırın okunmasını dikkate almayın ve komutta değerleri ekleyin. mysqlimport kullanarak başlık satırı ile csv ithal için

+0

Az sorular, öncelikle column1 yapmak, sütun2 vb etrafındaki tırnak olması gerekir? Ve benim sorunum, onların almam gereken yaklaşık 50'den fazla sütun ismi olmasıdır. İlk satır tüm bu verileri içerir, yani ilk satırı okumak için bir yol olsaydı ve bunları sütun isimleri olarak ayarlasaydı, bu en iyisi olurdu. Her adı tek tek yazmak çok yorucu olurdu. Teşekkür ederim. – de1337ed

+0

Yazmaya gerek yok, sütun adlarının virgülle ayrılmış olduğunu, bu yüzden sadece csv dosyasından ilk satırı kesip komutun içine yapıştırın. Bildiğim kadarıyla phpMyAdmin'de csv önce okunıyor böyle bir sorgu oluşturmak ve daha sonra ithalat yapılmakta. – Balanivash

+0

Hmm, bunu düşünmedim. Bırak onu vereyim. Teşekkür ederim. Herhangi bir şansla, bir metin editöründen nasıl kopyalanacağını ve ubuntu terminaline nasıl yapıştırılacağını biliyor musunuz? – de1337ed

4

, sadece

--ignore-lines=N 

Bu seçenek bağladıktan sayfasında açıklanan (veri dosyasının ilk N satırları görmezden) ekleyin.

+0

İlk satırı görmezden gelmeye çalışmıyorum. İlk satırı sütun başlıkları olarak kullanmak istiyorum. – de1337ed

+0

Bunu mysqlimport ile yapamazsınız, ancak tablonuz için csv alanlarınızın sırasına komut vermek için --columns = column_list seçeneğini ekleyebilirsiniz. – Bjoern

9

Sen yapabileceğini dosya virgülle ayrılmış değil ise, ve noktalı virgül ayrılmış olmayan bir

mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile` 

. Else de bunun aracılığıyla sed gerekebilir.

+0

Tablo, üstbilgilerle zaten oluşturulmalı mı? Ve hangi format '$ yourfile', * .csv çalışır? – HattrickNZ

+2

İçe aktarma dosyanızın başlıklara ihtiyacı vardır, 'head -n 1 $ yourfile' CSV dosyanızın ilk virgülle ayrılmış satırını döndürür. --ignore-lines = 1 sonra bir satır onu yok sayar, aksi takdirde bunları tablonuza eklemeye çalışır. Varsayılan sınırlayıcı sekme (\ t) 'dir, bunun yerine bir virgül sınırlayıcıyı kullanmak için bir '--fields-terminated-by =', '' yan tümcesi ekleyin. Lütfen http://linux.die.net/man/1/mysqlimport ve http://dev.mysql.com/doc/refman/5.7/en/load-data.html –

+0

adreslerini okuyunuz. mysqlimport --columns = $ (head -n 1 FILE) --ignore-lines = 1 dbname DOSYA dosya nerede veritabanı dosyasıdır? --columns = 'head -n 1 $ yourfile' seçeneğine sahip olmak bir sözdizimi hatası üretir. Ayrıca, birçok mysql sunucusunun varsayılan olarak --secure-file-priv seçeneği tarafından yapılandırıldığından --local seçeneğini eklemeniz gerekebilir. –

5

bu deneyin:

mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'" 
İlgili konular