SQL Server’da CSV Dosyasından Hızlı Veri İçe Aktarma: BULK INSERT Kullanımı

Günümüzde verilerin farklı kaynaklardan alınıp veritabanlarına aktarılması oldukça yaygın bir gereklilik. Microsoft SQL Server’da BULK INSERT, büyük boyutlu CSV dosyalarını hızlı ve kolay bir şekilde tabloya aktarmanın etkili bir yoludur.

Bu makalede, BULK INSERT ile CSV dosyalarını nasıl içe aktaracağınızı ve ayrıca XML format dosyası kullanarak işlemi nasıl özelleştireceğinizi öğrenebilirsiniz.


1. CSV Dosyasını Hazırlama

BULK INSERT işleminin başarılı olması için, CSV dosyanızın formatı hedef tablo yapısıyla uyumlu olmalıdır. İşte örnek bir CSV dosyası:

Dosya Adı: C:\Data\Employees.csv

Name,Age,JoiningDate
John Doe,30,2020-01-15
Jane Smith,28,2021-07-20
Mark Brown,35,2019-11-10

Bu dosya üç sütun içeriyor: Name (metin), Age (tamsayı), JoiningDate (tarih).


2. Hedef Tabloyu Oluşturma

CSV dosyasındaki sütunlara uygun bir tablo oluşturmanız gerekiyor. Örneğin:

CREATE TABLE Employees (
    Name NVARCHAR(50),
    Age INT,
    JoiningDate DATE
);

Bu tablo, verileri SQL Server’da depolamak için kullanılacaktır.


3. BULK INSERT ile Veriyi İçe Aktarma

Şimdi CSV dosyasındaki verileri hızlı bir şekilde tabloya aktarmak için BULK INSERT komutunu kullanabilirsiniz:

BULK INSERT Employees
FROM 'C:\Data\Employees.csv'
WITH (
    FIELDTERMINATOR = ',', -- Sütunları ayıran karakter
    ROWTERMINATOR = '\n',  -- Satırları ayıran karakter
    FIRSTROW = 2           -- Başlık satırını atlamak için
);

Bu komut şu şekilde çalışır:

  • FIELDTERMINATOR: Sütunlar arasındaki ayırıcı (örnekte virgül ,).
  • ROWTERMINATOR: Satırların sonlandırıcı karakteri (örnekte yeni satır \n).
  • FIRSTROW: Yükleme işlemini başlatmak için veri içeren ilk satırı belirtir. Başlık satırını atlamak için 2 yazılır.

4. Hata Yönetimi

Büyük verilerle çalışırken bazı satırlarda hata olma olasılığı yüksektir. Bu durumda, hatalı kayıtları tespit etmek için bir ERRORFILE tanımlayabilirsiniz:

BULK INSERT Employees
FROM 'C:\Data\Employees.csv'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2,
    ERRORFILE = 'C:\Data\ErrorLog.txt'
);

ERRORFILE, yükleme sırasında oluşan hatalı kayıtları belirtilen dosyaya kaydeder. Böylece sorunları analiz etmek daha kolay hale gelir.


5. XML Format Dosyası ile BULK INSERT İşlemini Özelleştirme

Bazen CSV dosyasındaki sütun sırası veya veri formatı, hedef tabloyla birebir eşleşmeyebilir. Bu durumda bir XML format dosyası kullanarak veri yüklemesini özelleştirebilirsiniz.

Format Dosyası Oluşturma

SQL Server, bir format dosyası oluşturmak için bcp aracını kullanmanıza olanak tanır. Örneğin:

bcp Employees format nul -c -x -f C:\Data\EmployeesFormat.xml -t, -T -S localhost

Bu komut şu işlevleri yerine getirir:

  • -c: Verilerin karakter formatında olduğunu belirtir.
  • -x: XML format dosyası oluşturur.
  • -f: Format dosyasının yolunu belirtir.
  • -t,: Alan ayırıcı olarak virgül kullanır.
  • -T: Windows kimlik doğrulamasıyla oturum açar.
  • -S localhost: SQL Server örneğinin adını belirtir.

Oluşturulan XML Format Dosyası Örneği

İşte oluşturulan bir XML format dosyasının basit bir örneği:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format">
  <RECORD>
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," />
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," />
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="Name" xsi:type="SQLNVARCHAR" />
    <COLUMN SOURCE="2" NAME="Age" xsi:type="SQLINT" />
    <COLUMN SOURCE="3" NAME="JoiningDate" xsi:type="SQLDATE" />
  </ROW>
</BCPFORMAT>

Bu dosyada:

  • FIELD: CSV dosyasındaki her sütun için ayırıcılar ve format türleri belirtilir.
  • COLUMN: CSV sütunlarının hedef tablo sütunlarına eşleştirilmesini sağlar.

XML Format Dosyasını Kullanarak Veri Yükleme

Format dosyasını kullanarak veri yükleme işlemi şu şekilde yapılır:

BULK INSERT Employees
FROM 'C:\Data\Employees.csv'
WITH (
    FORMATFILE = 'C:\Data\EmployeesFormat.xml'
);

Bu yöntem, sütun sıralarının veya veri formatlarının farklı olduğu durumlarda büyük kolaylık sağlar.


6. Performans İpuçları

  • Dizinler: Veri yüklemeden önce tablo üzerindeki dizinleri geçici olarak devre dışı bırakın ve yükleme tamamlandıktan sonra yeniden oluşturun.
  • Transaction Log: Yükleme sırasında transaction log boyutunu sınırlandırmak için tabloyu TABLOCK seçeneğiyle yükleyin:
BULK INSERT Employees
FROM 'C:\Data\Employees.csv'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
);

Sonuç

BULK INSERT ve XML format dosyaları, SQL Server’da CSV dosyalarını hızlı ve esnek bir şekilde içe aktarmak için güçlü araçlardır. Büyük veri kümeleriyle çalışırken bu yöntemleri doğru bir şekilde uygulayarak hem zaman tasarrufu sağlayabilir hem de süreçlerinizi optimize edebilirsiniz.

    Loading