Bu Araç Nedir?
Bir test veritabanını doldurmak, bir elektronik tablo dışa aktarımını bir tabloya yüklemek veya küçük bir veri kümesini taşımak genellikle aynı şekilde başlar: elinizde bir CSV dosyası vardır ve SQL'e ihtiyacınız olur. Bu araç CSV'nizi ayrıştırır (başlık satırını sütun adları olarak kullanarak) ve tüm veri satırlarını kapsayan tek bir INSERT INTO ifadesi oluşturur; bu ifade doğrudan bir veritabanı istemcisine yapıştırılmaya hazırdır.
Metin değerleri tek tırnak içine alınır; içteki tırnaklar iki katına çıkarılarak kaçış karakteriyle işlenir (böylece O'Brien, O''Brien haline gelir) — bu, MySQL, PostgreSQL ve SQLite'ın ortak kullandığı standart kaçış kuralıdır. Boş bir CSV hücresi, boş bir dize yerine SQL anahtar sözcüğü NULL olarak yazılır — bu bilinçli bir tercihtir, çünkü bir elektronik tablodaki boş hücre genellikle "değer yok" anlamına gelir, "boş bir metin parçası" anlamına gelmez ve çoğu şema bunun için NULL bekler.
Bir değerin tırnak içine alınıp alınmayacağına, gerçek bir tür çıkarımı değil, basit bir sezgisel yöntemle karar verilir: boşlukları kırpılmış hücre, sade bir tam sayı veya ondalık sayı gibi görünüyorsa (isteğe bağlı olarak başında bir eksi işareti bulunabilir), tırnaksız yazılır; geri kalan her şey — sayıya benzeyen ama fazladan karakter içeren, örneğin başında sıfır bulunan posta kodları gibi değerler dahil — metin olarak tırnak içine alınır. Bu, çıktının dürüst kalmasını sağlar: küçük bir içe aktarma için iyi bir başlangıç noktasıdır, ancak çalıştırmadan önce verilerinizi gerçek tablo şemanıza göre doğrulamanın yerini tutmaz.
Kaynak: CSV ayrıştırma, resmi bir CSV standardına en yakın şey olan RFC 4180'i izler; dize kaçışı için tek tırnağın iki katına çıkarılması, MySQL, PostgreSQL ve SQLite tarafından belgelenen ortak kuraldır.
Neden Kullanmalısınız?
- Özelleştirilebilir tablo adı — bir kez ayarlayın, her satır o tabloyu hedefler.
- Doğru dize kaçış işlemi — değerlerin içindeki tek tırnaklar iki katına çıkarılır, böylece SQL bozulmaz veya kesilmez.
- Öngörülebilir NULL işleme — boş hücreler, çoğu veritabanının eksik verileri ayırt etme biçimiyle uyumlu olarak boş dize yerine NULL olur.
- Yaygın SQL sözdizimi — burada oluşturulan INSERT INTO ... VALUES ... ifadesi MySQL, PostgreSQL ve SQLite'ta değişiklik yapılmadan çalışır.
- %100 istemci tarafında — CSV verileriniz (müşteri kayıtları veya işletme verileri içerebilir) tarayıcınızda ayrıştırılır ve dönüştürülür, hiçbir yere yüklenmez.
Nasıl Kullanılır
- Başlık satırı içeren CSV verisini yapıştırın, örneğin: name,age\nAlice,30\nBob,25.
- Hedef tablo adını girin (varsayılan my_table).
- "SQL Oluştur" düğmesine tıklayın.
- INSERT INTO ifadesini kopyalayın veya .sql dosyası olarak indirin, ardından veritabanınıza karşı çalıştırın.
Örnek
Giriş
name,age,city
Alice,30,
Bob,,NYCÇıkış
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Boş hücrelerin NULL haline geldiğine (boş dize değil) ve sayıya benzeyen age değeri 30'un tırnaksız kaldığına, her metin değerinin ise tırnak içine alındığına dikkat edin.
Pratik ipuçları
- Yerel bir test veritabanını doldurmak: bir elektronik tablodan küçük bir örneği CSV olarak dışa aktarın, burada dönüştürün ve INSERT ifadesini geliştirme veritabanınıza karşı çalıştırın.
- Oluşturulan SQL'i gerçek bir tabloya karşı çalıştırmadan önce her zaman sütun türlerini gözden geçirin — bu araç, sayısal mı metin mi olduğunu gerçek şemanıza göre değil basit bir sezgisel yönteme göre çıkarır, bu yüzden belirli bir biçim bekleyen bir tam sayı sütunu manuel ayarlama gerektirebilir.
- Binlerce satırınız varsa, bu aracın oluşturduğu tek bir çok satırlı INSERT ifadesi yine de geçerli SQL'dir, ancak çok büyük ifadeler bir veritabanının maksimum paket boyutunu aşabilir — bu sınıra takılırsanız önce CSV'yi daha küçük gruplara bölün.
Neden NULL, boş dize değil
CSV'den SQL'e elle betik yazarken yapılan yaygın bir hata, eksik her hücreyi boş bir dize '' olarak ele almaktır. Bu teknik olarak geçerli SQL'dir, ancak genellikle istediğiniz anlama gelmez: tam sayı olarak tanımlanan bir sütun ''yi kesinlikle reddedecektir ve bir metin sütununda bile, '' çoğu şema tasarımında ve raporlama sorgularında "bu değeri bilmiyoruz"dan farklı bir şey ifade eder (bir WHERE sütun IS NULL kontrolü boş dizelerle eşleşmez, tersi de geçerlidir). Boş hücreler için NULL kullanmak, çoğu veritabanının ve ORM'nin beklediği anlamla örtüşür ve bazı satırlarda sayısal bir sütunda eksik değerler olduğunda tür hatalarını önler.
Sıkça Sorulan Sorular
Bu, her SQL veritabanıyla çalışır mı?
Oluşturulan sözdizimi — ters tırnak içine alınmış tanımlayıcılar, tek tırnak içine alınmış metin değerleri, standart INSERT INTO ... VALUES ... — MySQL, PostgreSQL ve SQLite arasında yaygındır. PostgreSQL, tanımlayıcıların etrafında kesinlikle ters tırnak gerektirmez (tırnaklama gerekiyorsa çift tırnak kullanır), ancak ters tırnaklı adlar da orada, ayrılmış sözcüklerle çakışan alışılmadık sütun adlarınız olmadığı sürece zarar vermez. Burada tek bir resmi SQL standardı izlenmez — sadece en yaygın veritabanlarında değiştirilmeden çalışan sözdizimi kullanılır.
Boş bir hücre neden boş bir dize '' yerine NULL oluyor?
Bu bilinçli bir tasarım tercihidir: gerçek dünyadaki CSV dışa aktarımlarının çoğunda boş bir hücre, değerin bilinmediği veya geçerli olmadığı anlamına gelir, kelimenin tam anlamıyla boş bir metin anlamına gelmez. Çoğu veritabanı şemasının bunun için beklediği şey NULL'dur. Kullanım durumunuz gerçekten boş dizelere ihtiyaç duyuyorsa, bu durumlar için oluşturulan SQL'i elle düzenlemeniz gerekir.
Araç, bir değerin tırnak gerektirip gerektirmediğine nasıl karar veriyor?
Bu, gerçek bir tür çıkarımı değil, basit bir sezgisel yöntemdir: boşlukları kırpılmış bir hücre yalnızca rakamlardan oluşuyorsa (isteğe bağlı bir başlangıç eksi işareti ve en fazla bir ondalık noktayla), tırnaksız bir sayı olarak yazılır. Geri kalan her şey metin olarak tırnak içine alınır. Bu, 00501 gibi bir posta kodunun veya bir telefon numarasının, yalnızca fazladan karakter içerdiğinde metin olarak ele alınacağı anlamına gelir — tek başına başındaki bir sıfır burada hâlâ sayısal olarak ayrıştırılır, bu yüzden SQL'i çalıştırmadan önce posta kodları ve kimlikler gibi tanımlayıcıları mutlaka kontrol edin.
Verilerim herhangi bir yere yükleniyor mu?
Hayır. Hem ayrıştırma hem de SQL oluşturma, tarayıcınızda JavaScript olarak gerçekleşir — hiçbir sunucuya bir şey gönderilmez, bu da dışa aktarılan müşteri veya işletme kayıtlarıyla kullanımını güvenli hale getirir.
Virgül veya tırnak içeren CSV değerlerini işleyebilir mi?
Evet. CSV, tırnak içindeki alanlarda virgülleri, satır sonlarını ve ikiye katlanmış tırnakları anlayan uygun bir tırnaklı alan ayrıştırıcısıyla ayrıştırılır — basit bir virgülle ayırma değil — bu yüzden "Smith, John" gibi bir alan iki sütuna bölünmeden tek bir değer olarak okunur.