Başlıkları olan bir CSV dosyasından tablo oluşturma


12

Sadece belirli bir CSV içeriğine dayalı yeni bir MySQL tablosu oluşturmak için bir yol bulmak için arıyorum. Kullanacağım CSV dosyaları aşağıdaki özelliklere sahiptir;

  • "|" sınırlandırılmış.
  • İlk satır, sütun adlarını (başlıkları) ve ayrıca "|" sınırlandırılmış.
  • Sütun adları ve sırası sabit değildir.
  • Sütun sayısı sabit değildir.
  • Dosyalar büyük boyuttadır (1 mil sıra / 50 sütun).

Excel'de bu oldukça basit, ancak MySQL ile öyle görünmüyor (Google'da şans yok). Neye bakmam gerektiği konusunda herhangi bir öneriniz var mı?

Yanıtlar:


10

Bir parçası olan CSVQL'yi kullanabilirsiniz csvkit(CSV dosyalarına dönüştürmek ve bunlarla çalışmak için bir dizi yardımcı program):

  • Linux veya Mac OS X
  • özgür ve açık kaynak
  • sudo pip install csvkit
  • Misal: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • CREATE TABLEDosya içeriğine dayalı bir ifade oluşturur . Sütun adları, CSV dosyasının ilk satırından alınır.

2

Python'u kullanmayı tercih ediyorsanız, Pandalar benim için harika çalıştı (csvsql sizin durumunuza göre sonsuza kadar asıldı ve daha az sütun ve satır). Gibi bir şey:

from sqlalchemy import create_engine
import pandas as pd

df = pd.read_csv('/PATH/TO/FILE.csv', sep='|')
# Optional, set your indexes to get Primary Keys
df = df.set_index(['COL A', 'COL B'])

engine = create_engine('mysql://user:pass@host/db', echo=False)

df.to_sql(table_name, engine, index=False)

Nerede tanımlıyorsunuz dwh_engine? Bu bir yazım hatası mı demek istiyorsun engine?
joanolo

Evet olmalı engine! Spotting için cevap teşekkürler
ivansabik

Satır sayısı yüksekse to_sql çok fazla zaman alır. Bizim için yaklaşık 36000 sıra yaklaşık 90 dakika sürdü. Doğrudan yük bildirimi 3 saniye içinde yapıldı.
mvinayakam

0

Çeşitli sütunların veri türlerine, boyutlarına vb. Dayalı bir CREATE TABLE oluşturmalısınız.

Daha sonra '|' TARAFINDAN SONLANDIRILAN ALAN VERİ YÜKLEME ... "\ N" ATLAMA 1 HATTI İLE DEVAM EDİLEN HATLAR ...; (Ayrıntılar için kılavuz sayfasına bakınız.)

Her csv -> tablosu için de aynısını yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.