none
SQL Server'a (veya başka bir öneriniz) 400.000 satırdan fazla satırı olan csv dosyayı almak?

    Soru

  • Merhaba, elimde 1 milyon satırdan fazla satırı olan ve yaklaşık 20 adet sütunu olan csv dosyası var. Ancak bu dosyayı Excel, Access vb programlar 400000 satıra kadar alabiliyor. SQL server Deniali CTP3 indirip kurdum. Bu kurulumlar içinde yer alan Import and Export Data (32 bit) kullanarak csv dosyayı veritabanına çekmeye çalıştım ancak her seferinde 400000 satırdan sonraki verileri göremiyorum. Yardımcı olacak arkadaşlara şimdiden teşekkür ederim. Saygılarımla...

    • Düzenleyen ErkanO44 29 Eylül 2011 Perşembe 11:43
    29 Eylül 2011 Perşembe 08:43

Yanıtlar

  • Selam,

     

    SQL Server'da Import işleminin 400.000 gibi bir kayıt sınırının olduğunu sanmıyorum. Başka bir sorun oluyor olabilir. "400.000'den sonraki verileri göremiyorum" derken kastettiğin tam olarak nedir? Örneğin aktarım yapılırken (sanırım Wizard'ı kullanarak yapıyorsun) ekranda kaç tane kayıt aktarıldığına dair bilgi veriliyor. Orada ne görüyorsun? Tüm işlem başarıyla tamamlandı olarak mı görünüyor, yoksa hata ile mi sonlanıyor? Şayet hatayla sonlanıyorsa hata nedir?

    Ayrıca BOL'dan aşağıdaki sayfaya da bir gözatabilirsin:
    http://msdn.microsoft.com/en-us/library/ms187042.aspx

     


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com
    30 Eylül 2011 Cuma 08:48

Tüm Yanıtlar

  • Selam,

     

    SQL Server'da Import işleminin 400.000 gibi bir kayıt sınırının olduğunu sanmıyorum. Başka bir sorun oluyor olabilir. "400.000'den sonraki verileri göremiyorum" derken kastettiğin tam olarak nedir? Örneğin aktarım yapılırken (sanırım Wizard'ı kullanarak yapıyorsun) ekranda kaç tane kayıt aktarıldığına dair bilgi veriliyor. Orada ne görüyorsun? Tüm işlem başarıyla tamamlandı olarak mı görünüyor, yoksa hata ile mi sonlanıyor? Şayet hatayla sonlanıyorsa hata nedir?

    Ayrıca BOL'dan aşağıdaki sayfaya da bir gözatabilirsin:
    http://msdn.microsoft.com/en-us/library/ms187042.aspx

     


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com
    30 Eylül 2011 Cuma 08:48
  • Merhaba, öncelikle ilginiz ve cevabınız için teşekkür ederim. Belirttiğiniz noktaları kontrol ediyorum. Verileri csv formatında tekrar aldım type komutu ile satırları kontrol edeceğim. csv formatında da satır sınırı yok değil mi?

     

    30 Eylül 2011 Cuma 13:23
  • Merhaba,
    SQL Serverda böyle bir ksıtılama yok Az önce test için bir csv dosyasından 4.5 milyon kaydı import ettim. Export/import wizard report kısmındaki hata mesajını payalaşabilir msiniz?
    30 Eylül 2011 Cuma 13:42
  • Merhaba Erkan,

    Kontrollerinizi gerçekleştirebildiniz mi , bizi bilgilendirebilirmisiniz acaba?

    Teşekkrüler.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!
    12 Ekim 2011 Çarşamba 07:04
  • Merhaba, öncelikle geç cevap yazdığım için özür dilerim. Kontrol ettiğimde csv formatta verileri atan programın 400 binden sonra atmadığını farkettim. Sanırım Bug var. İlginiz için teşekkür ederim. Bu arada Windows HPC Server da RAM paylaşımı varmıdır bir bilginiz varmı?
    15 Mayıs 2012 Salı 09:45
  • Oyle bir sınır yok. Asagıda ornek bir C# kodu var, ben bunu performans testi icin kullanıyordum (eski bir makinede 1,229,000+ kaydı 35-37 sn'de yukledi. Asıl vakti aradaki Jet.Oledb kaybettiriyor):

    Bu kodu doğrudan LinqPad'e koyup calıştırabilirsin, sadece dosyanın path, filename biligleriyle SQL server bağlantı bilgilerini değiştirmen gerekiyor - mapping bilgilerini de. Dikkat et kodda global temp tablo kullanılıyor):

    void Main()
    {
      Stopwatch sw = new Stopwatch();
      sw.Start();
      string sqlConnectionString = @"server=.\SQLExpress;Trusted_Connection=yes;Database=Test";
    
      string path = @"c:\temp\SampleTextFiles";
      string fileName = @"combDoubled.csv";
      
      using (OleDbConnection cn = new OleDbConnection(
    	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+
    	";Extended Properties=\"text;HDR=No;FMT=Delimited\";"))
      
      using (SqlConnection scn = new SqlConnection( sqlConnectionString ))
      {
      OleDbCommand cmd = new OleDbCommand("select * from "+fileName, cn);
      
      SqlBulkCopy sbc = new SqlBulkCopy(scn, SqlBulkCopyOptions.TableLock,null);
      
      sbc.ColumnMappings.Add(0,"[Category]");
      sbc.ColumnMappings.Add(1,"[Activity]");
      sbc.ColumnMappings.Add(5,"[PersonId]");
      sbc.ColumnMappings.Add(6,"[FirstName]");
      sbc.ColumnMappings.Add(7,"[MidName]");
      sbc.ColumnMappings.Add(8,"[LastName]");
      sbc.ColumnMappings.Add(12,"[Email]");
    
      cn.Open();
      scn.Open();
      
      SqlCommand createTemp = new SqlCommand();
      createTemp.CommandText = @"create table ##PersonData 
      (
        [Id] int identity primary key,
        [Category] varchar(50), 
        [Activity] varchar(50) default 'NullOlmasin', 
        [PersonId] varchar(50), 
        [FirstName] varchar(50), 
        [MidName] varchar(50), 
        [LastName] varchar(50), 
        [Email] varchar(50)
      )"; 
      createTemp.Connection = scn;
      createTemp.ExecuteNonQuery();
     
      OleDbDataReader rdr = cmd.ExecuteReader();
      
      sbc.NotifyAfter = 100000;
      sbc.BatchSize = 1000;
      sbc.BulkCopyTimeout = 10000;
      sbc.DestinationTableName = "##PersonData";
      
      sbc.SqlRowsCopied += (sender,e) =>
        {
        Console.WriteLine("-- Copied {0} rows to {1}.[{2} milliseconds]", 
          e.RowsCopied, 
          ((SqlBulkCopy)sender).DestinationTableName,
          sw.ElapsedMilliseconds);
        };
      
      sbc.WriteToServer(rdr);
    
      if (!rdr.IsClosed) { rdr.Close(); }
      
      cn.Close();
      scn.Close();
      }
      sw.Stop();
      sw.Dump();
    }

    15 Mayıs 2012 Salı 19:35
  • Merhaba, teşekkürler Çetin Bey. 
    06 Haziran 2012 Çarşamba 13:55
  • Merhaba, kontrol ettim, SQL de böyle bir sınır yokmuş dediğiniz gibi. Verilerialdığım programda csv ye atarken sorun var 400 binden sonrasını atmıyor bir bug sanırım. İlginiz için teşekkür ederim. Selamlar...
    06 Haziran 2012 Çarşamba 13:56