SQL'den CSV'ye Dönüştürücü

Bazen ihtiyacınız olan verinin tek kopyası bir yedekten gelen bir .sql dosyasıdır; INSERT INTO users (id, email, created_at) VALUES (...) ifadelerinden oluşan bir döküm. Yalnızca yeniden dışa aktarmak için onu bir veritabanına yüklemek yavaştır. Bu dönüştürücü, sütun listesini ve her VALUES demetini doğrudan INSERT sözdiziminden okur ve şemayı hiç geri yüklemeden Excel, Google E-Tablolar, Numbers veya pandas ile açabileceğiniz bir CSV üretir.

SQL INSERT ifadeleri CSV'ye nasıl dönüştürülür

  1. 1

    SQL'i yapıştırın

    Bir veya daha fazla INSERT ifadesi bırakın. Hem tek satırlı hem de çok satırlı VALUES (...) blokları desteklenir.

  2. 2

    Sütunlar otomatik algılanır

    Ayrıştırıcı, VALUES ifadesinden hemen önceki `(col1, col2, ...)` listesini okur ve onu CSV başlık satırı olarak değerlendirir.

  3. 3

    Satırlar çıkarılır

    Her `(val1, val2, ...)` demeti bir CSV satırı olur. Tek tırnaklı dizeler tırnaklardan arındırılır; sayılar ve NULL değerleri metin olarak geçer.

  4. 4

    CSV'yi kopyalayın

    CSV çıktısını alıp bir elektronik tabloya yapıştırın veya `.csv` uzantısıyla kaydedin.

Ayrıştırıcının kabul ettikleri

INSERT INTO users (id, email, created_at) VALUES
  (1, 'alice@example.com', '2024-01-12 09:00:00'),
  (2, 'bob@example.com',   '2024-01-13 10:30:00'),
  (3, 'carol@example.com', '2024-01-13 11:15:00');

Şuna dönüşür:

id,email,created_at
1,alice@example.com,2024-01-12 09:00:00
2,bob@example.com,2024-01-13 10:30:00
3,carol@example.com,2024-01-13 11:15:00

Uygulanan CSV kaçış kuralları

  • Ayırıcı her zaman virgüldür; ayırıcı seçeneği yoktur.
  • Virgül, çift tırnak veya satır sonu içeren alanlar çift tırnak içine alınır.
  • İçteki çift tırnaklar ikiye katlanır (", "" olur); RFC 4180 uyarınca.
  • SQL dize sabitlerinin baştaki ve sondaki tek tırnakları kaldırılır.
  • SQL NULL değeri, düz metin NULL olarak geçer; aracınız boş hücre bekliyorsa sonrasında değiştirin.

Bilinmesi gereken sınırlamalar

  • Sütun listesi gereklidir. Ayrıştırıcı, başlığı VALUES ifadesinden önceki (col1, col2, ...) listesinden okur. Sütun listesi olmayan çıplak bir INSERT INTO t VALUES (...) ifadesi başlıksız CSV satırları üretir.
  • Bir seferde bir tablo. Dökümünüz farklı tablolar için INSERT ifadelerini karıştırıyorsa önce onları ayırın. Farklı genişlikteki satırlar düzensiz bir CSV üretir.
  • CREATE TABLE ayrıştırması yok. Sütun türleri kullanılmaz. Tarihler, JSON ve ikili blob değerleri ham metin olarak geçer.
  • Her parantez grubu bir satır olur. Ayrıştırıcı her (...) grubunu bir satıra dönüştürür; bu nedenle parantez içeren son yan tümceler (ON DUPLICATE KEY UPDATE, RETURNING), NOW() gibi işlev çağrıları veya bir değerin içindeki (1,2,3) gibi iç içe diziler fazladan satır ekler. Girdiyi basit INSERT ... VALUES demetleriyle sınırlayın ve yapıştırmadan önce bu ifadeleri sabit değerlerle değiştirin.

Sık Sorulan Sorular

Evet, INSERT ifadesi bu veritabanlarının paylaştığı standart INSERT INTO table (cols) VALUES (...) biçimini izlediği sürece. Araç tam bir SQL ayrıştırıcısı çalıştırmaz: sütun listesini ve parantez içindeki değer demetlerini çıkarır; bu yüzden her ifadeyi basit INSERT sözdiziminde tutun.

Tek tırnaklı SQL dizelerinin içindeki virgüller korunur. Çıktıda virgül, tırnak veya satır sonu içeren her alan çift tırnak içine alınır ve içteki tırnaklar RFC 4180 uyarınca ikiye katlanır. Kendisi parantez içeren değerler düzgün bölünmeyebilir.

Hayır. SQL kodunuz sunucumuza gönderilir, tek geçişte ayrıştırılır ve geri döndürülür; bu yüzden girdiyi her seferinde birkaç megabaytla sınırlayın. Çok büyük dökümlerde dosyayı parçalara bölün (parça başına bir INSERT bloğu) ve onları parça parça dönüştürün.

Hayır, çıktı düz bir CSV’dir. Sütun türleri, dizinler ve kısıtlamalar CREATE TABLE içinde yer alır ve bu dönüştürücünün kapsamı dışındadır.

SQL kodunuz yalnızca CSV üretmek için sunucumuza gönderilir ve saklanmaz; kaç satırın dönüştürüldüğüne dair anonim bir sayaç tutarız, asla SQL metninin kendisini değil.

İlgili Araçlar

Araç diğer dillerde mevcuttur