Kaynak LOB sütunlarıyla uğraşırken “Satır satır” getirme yönteminden kaçınma


12

SSIS kullanarak yeni SQL Server şemasına geçirmeye çalıştığım eski bir PostgreSQL veritabanı kaynağı (ODBC) var. Bir uyarı alıyorum:

Tabloda LOB sütun (ları) bulunduğundan 'Satır Satır' getirme yöntemi uygulanır. Sütun içeriği LOB

Mesele şu ki, hiçbir sütunun gerçekten LOB olması gerekmiyor . TEXT türleri olan ancak varchar (max) içine kolayca sığabilecek birkaç tane var. Hatta yabancı olsa da, çoğu zaten vardır varchars, ama buna bir LOB sanki tedavi ediliyor varchar aşacak herhangi (128) görünmektedir (avans özelliklerinde, veri türü DT_NTEXT olduğunu).

Ben olay açıkça her deyim türü select deyiminde uygun uzunlukta bir varchar döküm manuel bir SQL komutu yapmaya çalıştı ve hala ODBC kaynağında DT_NTEXT olarak ayarlanmaktadır.

Ben bir DBA değilim, bu yüzden gerçekten aptalca bir şey yapmam tamamen mümkün. Sadece türlerin varchars olarak sonuçlanmasını sağlamanın en iyi yolunu bilmek istiyorum, böylece toplu olarak alabilirim. Herhangi bir fikir?

Önemli olması durumunda, Visual Studio 2013 içinde SSIS-BI 2014 kullanıyorum.


3
Bunları kaynak sistemde açıkça maks. Olmayan bir boyuta yayınladığınızda, bu mevcut bir veri akışında mıydı yoksa yeni bir tane mi, yoksa en azından yeni bir kaynak bileşeni mi oluşturdunuz? Aynı sütun adlarına ve yalnızca daha ince türlere sahip bir sorguyu sağladığınızda, bazı durumlarda bu bir değişiklik olarak kaydedilmez, böylece düzenleyici bir meta veri toplama işlemini (pahalı olabilir) tetiklemez. Ayrıca, bir varchar (max) bir SSIS veri akışı için LOB olarak kabul edilir ve agilebi.com/jwelch/2010/05/11/…
billinkc

ODBC veri kaynağı bileşeninde, bir tablo seçme veya sorgu kullanma seçeneğiniz vardır. Burada döküm yapıyorum: özel bir sorguda. varchar(max)Sütun verilerinin SSIS'nin amaçları için 4000 civarında olan maksimum varchar boyutuna sığabileceğini söylemekten kısaca bahsetmiştim . Aslında hiçbir şey yapmıyorum varchar(max); ancak, varchar(4000)sadece güvende olmak için bazı sütunlar yaptım .
Chris Pratt

Yanıtlar:


4

128'den daha büyük varchar için Veri Dönüştürme'yi NTEXT olarak kullandım, ancak sonunda benim için hatayı kaldıran ayar Dış Verileri Doğrula olarak ayarlayın.


3

Görünüşe göre bu sadece 128'den büyük varcharları NTEXT olarak tedavi eden SSIS'e dayanmaktadır. Emin değilim neden. Ancak, ODBC kaynağının gelişmiş özelliklerine gidebilir ve türleri DT_WSTR gibi bir şeye dönüştürebilirim. Hangi çoğunlukla işe yarıyor gibi görünüyor.

Ancak, uğraştığım tabloların bir kaçının METİN sütunlarının bazılarında 4000 bayt yukarı taşıdığını belirledim, bu yüzden kesmeyi önlemek için maalesef bu sütunları DT_NTEXT olarak bırakmak zorundayım (SSIS izin vermeyecek 4000 bayttan fazla bir DT_WSTR türü ayarlarsınız). Sanırım bu durumlarda, sadece satır satır getirme ile sıkışmış, ama en azından birkaç tablo düzeltmek mümkün.


0

Bu çözüm benim için çalıştı:

Datasource özelliğindeki Max Varchar parametresini değiştirerek hatayı kaldırdım. Bağlantı yöneticisine gidin. Bağlantı dizesinin yanındaki oluşturma seçeneğini seçin. Daha fazla seçeneğe erişmek için bağlantı düğmesine tıklayın. Maks Varchar değerini değiştirin.

resim açıklamasını buraya girin


0

Benim durumumda kaynak, uzun metni LOB veri türü olarak da gören Filemaker ODBC'dir. Tabloda LOB sütun (ları) bulunduğundan, Satır Satır getirme yönteminin performansındaki aşırı düşüş nedeniyle uzun süre askıda kaldım. Böylece, konuşlandırılırken uzun bir süre sonra zaman aşımına uğrar ve sonunda başarısız olur.

Benim için bir cazibe gibi çalışan gerçek çözümü paylaşıyorum. 30k LOB tipi veri çekme değerinde bir gün benim için yaklaşık 10 dakika sürdü ::

DefaultBufferMaxRows değerini 1'e düşürün ve DefaultBufferSize değerini en fazla 100 MB'ye yükseltin. Sonra kaynak ODBC DSN 'metni uzun varchar gibi davran' seçeneğini işaretleyerek değiştirin. Ve veri tiplerini kaynaktan hedefe olduğu gibi eşleyin (kaynaktaki gelişmiş editörde herhangi bir değişiklik olmadan).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.