Sql & Veritabanı İle Uygulamalar İçin Veri Dönüştürme Süreci Nasıl Yapılır?

Sql & Veritabanı İle Uygulamalar İçin Veri Dönüştürme Süreci Nasıl Yapılır?
Sql & Veritabanı İle Uygulamalar İçin Veri Dönüştürme Süreci Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Veri dönüştürme süreçlerini başarıyla uygulayabilmek için bazı temel araçlara ve ortamlara sahip olmanız gerekir. 2026 yılı itibarıyla standart kabul edilen yapıları temel alacağız.

  • SQL Veritabanı: PostgreSQL 17 veya MySQL 9.0 gibi güncel bir veritabanı yönetim sistemi.
  • Programlama Dili: Veri işleme süreçlerinde esnekliği nedeniyle Python 3.13 veya Node.js 22.
  • Araçlar: Veri görselleştirme ve test için DBeaver veya pgAdmin gibi veritabanı yönetim araçları.
  • Güvenlik: Veri dönüşümü sırasında SQL Injection saldırılarına karşı hazırlıklı olmak için Prepared Statements (Hazırlanmış İfadeler) kullanımı.

Adım 1: Kaynak Verinin Analizi ve Temizlenmesi

Veri dönüştürme sürecinin ilk adımı, kaynağınızdaki verinin yapısını anlamaktır. Genellikle ham verilerde eksik değerler, hatalı formatlar veya gereksiz karakterler bulunur. SQL kullanarak bu verileri dönüştürmeden önce temizlemelisiniz.

-- Eksik değerleri kontrol etme ve temizleme
SELECT id, COALESCE(kullanici_adi, 'Anonim') AS kullanici_adi
FROM ham_veriler
WHERE durum = 'aktif';

Burada COALESCE fonksiyonu, kullanici_adi alanı boş (NULL) olan kayıtları 'Anonim' değeri ile değiştirerek veriyi standart bir formata sokar. Bu, veritabanı tutarlılığı için ilk ve en önemli adımdır.

Adım 2: Veri Tipi Dönüştürme (Casting) Süreçleri

Veritabanı uygulamalarında, verinin bir tablodan diğerine aktarılırken veri tipinin (data type) değişmesi gerekebilir. Örneğin, metin olarak saklanan tarihlerin gerçek tarih formatına dönüştürülmesi kritik bir işlemdir.

-- Metin formatındaki tarihi Date tipine dönüştürme
SELECT CAST(tarih_metni AS DATE) AS islem_tarihi
FROM siparisler
WHERE tarih_metni ~ '^\d{4}-\d{2}-\d{2}$';

Bu kod bloğu, CAST operatörünü kullanarak metin verisini veritabanının anlayacağı tarih formatına çevirir. Düzenli ifade (regex) kullanımı, hatalı formatlı verilerin işleme girmesini engelleyerek veri kaybını önler.

Adım 3: SQL ile Veri Formatlama ve Normalizasyon

Veri dönüştürme sürecinde, verinin normalize edilmesi (tekrar eden verilerin azaltılması) veya belirli bir iş mantığına göre formatlanması gerekir. Aşağıdaki örnekte, isim ve soyisim alanlarının birleştirilerek tek bir sütunda toplanması gösterilmektedir.

-- İsim ve soyisimi birleştirerek tam isim oluşturma
SELECT CONCAT(ad, ' ', soyad) AS tam_isim,
       UPPER(email) AS eposta_formatli
FROM musteriler;

CONCAT fonksiyonu verileri birleştirirken, UPPER fonksiyonu veritabanındaki e-posta adreslerini büyük harfe çevirerek standart bir arama/indeksleme yapısı oluşturur. Bu, veri tutarlılığını artırır.

Adım 4: Güvenli Veri Aktarımı ve SQL Injection Koruması

Veri dönüştürme sırasında veriyi bir tablodan diğerine taşırken, SQL Injection (SQL Enjeksiyonu) saldırılarına karşı mutlaka önlem almalısınız. Kullanıcıdan gelen veriyi doğrudan sorguya dahil etmek yerine, parametreli sorgular kullanın.

# Python ile güvenli veri aktarımı örneği
cursor.execute("INSERT INTO hedef_tablo (ad, yas) VALUES (%s, %s)", (kullanici_adi, yas))
db_connection.commit()

Bu Python kodu, veritabanına veri eklerken %s parametrelerini kullanarak SQL Injection riskini ortadan kaldırır. Veri dönüştürme sürecinde asla string birleştirme yöntemini kullanmayın.

Kritik Güvenlik Uyarısı: Veri dönüştürme işlemleri sırasında veritabanı kimlik bilgilerini kod içinde açıkça paylaşmayın. Her zaman ortam değişkenlerini (.env dosyaları) kullanın ve veritabanı kullanıcısına yalnızca gerekli olan en düşük yetki seviyesini (Principle of Least Privilege) tanımlayın.

Adım 5: Veri Dönüştürme Yöntemlerinin Karşılaştırılması

Veri dönüştürme süreçlerinde kullanılan farklı yaklaşımların avantaj ve dezavantajlarını anlamak, projeniz için en doğru yöntemi seçmenize yardımcı olur.

Yöntem Avantaj Dezavantaj
SQL (Stored Procedures) Yüksek hız, veritabanı içi işlem Bakımı zor olabilir
Python/Scripting Esnek mantık, hata yönetimi Bellek kullanımı yüksek
ETL Araçları Görsel arayüz, kolay takip Lisans maliyetleri

Adım 6: Dönüştürülen Verinin Doğrulanması ve Test Edilmesi

Dönüşüm tamamlandıktan sonra verinin doğruluğunu test etmek, sürecin bir parçasıdır. Sayısal kontrol (count) ve örnekleme yöntemleriyle verinin bozulmadığından emin olun.

-- Dönüşüm öncesi ve sonrası kayıt sayılarını karşılaştırma
SELECT COUNT(*) FROM kaynak_tablo;
SELECT COUNT(*) FROM hedef_tablo;

Bu sorgular, veri aktarımı sırasında herhangi bir satır kaybı olup olmadığını anlamanızı sağlar. Eğer sayılar tutarsızsa, dönüşüm mantığınızı gözden geçirmeniz gerekir.

Sıkça Sorulan Sorular

Veri dönüştürme sürecinde en sık yapılan hata nedir?

En sık yapılan hata, veri tipi uyumsuzluklarını (örneğin string'in sayısal alana yazılması) göz ardı etmektir. Bu durum, veritabanı indekslerinin çalışmamasına ve sorgu performansının düşmesine neden olur.

SQL Injection'dan nasıl korunurum?

Her zaman "Prepared Statements" kullanarak, kullanıcıdan gelen veriyi doğrudan sorgu metnine eklemek yerine parametre olarak gönderin.

Büyük veri setlerinde dönüşüm nasıl hızlandırılır?

Dönüşüm sırasında işlemleri "Batch" (yığın) halinde yaparak veritabanı üzerindeki yükü azaltın ve gereksiz indeksleri geçici olarak devre dışı bırakın.

JSON verisi SQL içine nasıl dönüştürülür?

Modern veritabanları JSONB gibi veri tiplerini destekler. SQL'in sunduğu jsonb_to_recordset gibi fonksiyonlarla JSON verisini ilişkisel tablo yapısına kolayca dönüştürebilirsiniz.

Veri dönüştürme sırasında hata alırsam ne yapmalıyım?

İşlemi bir "Transaction" (işlem bloğu) içerisinde yapın. Hata oluştuğunda ROLLBACK komutu ile veritabanını dönüşüm öncesi haline geri döndürün.

İleri Seviye Veri Dönüştürme Stratejileri: Stored Procedure ve Batch İşleme

Veri dönüştürme süreçleri, veritabanı ölçeği büyüdükçe tekil sorguların ötesine geçer. Büyük hacimli verilerle çalışırken, dönüştürme işlemini uygulama katmanında değil, veritabanı sunucusu üzerinde Stored Procedure (Saklı Yordam) kullanarak gerçekleştirmek, ağ trafiğini minimize eder ve işlem güvenliğini artırır.

Batch (Toplu) İşleme ile Performans Optimizasyonu

Milyonlarca satırlık bir tabloyu dönüştürürken tek bir UPDATE sorgusu çalıştırmak, veritabanı log dosyalarının (transaction log) aşırı büyümesine ve kilitlenmelere (locking) yol açabilir. Bunun yerine veriyi parçalara (batch) bölerek işlemek en sağlıklı yöntemdir.

-- Örnek: 5000'er satırlık gruplar halinde veri dönüştürme
DECLARE @BatchSize INT = 5000;
DECLARE @RowsAffected INT = 1;

WHILE @RowsAffected > 0
BEGIN
    UPDATE TOP (@BatchSize) Users
    SET Status = 'Verified'
    WHERE Status = 'Pending' AND CreatedDate < '2023-01-01';

    SET @RowsAffected = @@ROWCOUNT;
    -- İşlemciyi yormamak için kısa bir bekleme süresi eklenebilir
    WAITFOR DELAY '00:00:01';
END

Dönüştürme Sürecinde Hata Ayıklama ve Loglama

Veri dönüşümü sırasında beklenmedik hatalar (örneğin; veri tipi uyuşmazlığı veya kısıt ihlalleri) tüm süreci durdurabilir. Bu tür durumları yönetmek için TRY...CATCH blokları ile bir hata loglama tablosu kullanmak, hangi satırın neden başarısız olduğunu izlemenizi sağlar.

Hata İzleme Tablosu Oluşturma

Dönüştürme hatalarını yakalamak için aşağıdaki yapıyı kullanabilirsiniz:

CREATE TABLE TransformationErrors (
    ErrorID INT IDENTITY(1,1) PRIMARY KEY,
    RecordID INT,
    ErrorMessage NVARCHAR(MAX),
    ErrorTime DATETIME DEFAULT GETDATE()
);

-- Dönüşüm sırasında hata yakalama
BEGIN TRY
    UPDATE Products SET Price = CAST(RawPrice AS DECIMAL(10,2))
    WHERE IsNumeric(RawPrice) = 1;
END TRY
BEGIN CATCH
    INSERT INTO TransformationErrors (ErrorMessage)
    VALUES (ERROR_MESSAGE());
END CATCH

İleri İpuçları ve En İyi Uygulamalar

  • İndeksleri Yönetin: Büyük veri güncellemeleri yapmadan önce ilgili sütunlardaki indeksleri devre dışı bırakıp, işlem bittikten sonra yeniden oluşturmak (rebuild) performansı ciddi oranda artırır.
  • İşlem (Transaction) Yönetimi: Kritik dönüşümlerde BEGIN TRANSACTION ve COMMIT kullanarak, hata durumunda ROLLBACK ile veriyi eski haline döndürebilirsiniz.
  • Geçici Tablolar (Temp Tables): Karmaşık dönüşümlerde veriyi önce bir geçici tabloya aktarıp, orada temizleyerek nihai tabloya taşımak, ana tablonun kilitli kalma süresini azaltır.
Strateji Avantajı Kullanım Durumu
Batch İşleme Düşük kaynak tüketimi 100.000+ satırlı tablolar
Stored Procedure Yüksek hız ve güvenlik Tekrarlanan rutin görevler
Hata Loglama İzlenebilirlik Kritik finansal veri dönüşümleri

Sonuç

SQL ve veritabanı ile veri dönüştürme süreci, disiplinli bir planlama ve güvenlik önlemleri gerektiren teknik bir süreçtir. Verinin temizlenmesi, doğru tiplere dönüştürülmesi ve güvenli bir şekilde aktarılması, uygulamanızın uzun vadeli başarısı için temeldir. Bu rehberde öğrendiğiniz yöntemleri kendi projelerinizde uygulayarak daha temiz ve performanslı veritabanı yapıları oluşturabilirsiniz.

Bir sonraki adım olarak, veritabanı indeksleme stratejileri ve sorgu optimizasyonu konularına odaklanarak, dönüştürdüğünüz verilerin ne kadar hızlı işlenebileceğini keşfetmenizi öneririm.

Yasal Uyarı ve Sorumluluk Reddi: Bu makalede yer alan kod örnekleri ve teknik bilgiler eğitim amaçlıdır. Üretim (production) ortamında herhangi bir veri dönüştürme işlemi yapmadan önce mutlaka veritabanı yedeğinizi alın ve işlemleri önce test ortamında doğrulayın. Yanlış yapılandırılmış SQL komutları veri kaybına yol açabilir.

Bu yazıya tepkinizi paylaşın:
Deniz Aydın

On yıllık deneyimli bir içerik editörü olarak, karmaşık süreçleri herkesin anlayabileceği basit adımlara dönüştürmeyi seviyorum. Okuyucuların hayatını kolaylaştıracak pratik çözümler üretmek temel uzmanlık alanımdır.

Yorumlar (0)

Yorum Yaz