Unikanie metody pobierania „wiersz po wierszu” w przypadku źródłowych kolumn LOB

12

Mam starsze źródło bazy danych PostgreSQL (ODBC), które próbuję migrować do nowego schematu programu SQL Server za pomocą SSIS. Dostaję ostrzeżenie:

Metoda pobierania „wiersz po wierszu” jest wymuszona, ponieważ tabela zawiera kolumny LOB. Zawartość kolumny to LOB

Chodzi o to, że żadna kolumna tak naprawdę nie musi być LOB-em. Istnieje kilka rodzajów TEKSTÓW, ale można je łatwo zmieścić w varchar (maks.). Nawet obcy, choć większość już typu varchar, ale wydaje się niczego na varchar (128) jest traktowany tak, jakby był to LOB (we właściwościach zaliczek, typ danych jest DT_NTEXT).

Zdarzyło się, że próbowałem wykonać ręczne polecenie SQL, w którym jawnie rzuciłem każdy typ łańcucha na varchar o odpowiedniej długości w instrukcji select i nadal są one ustawiane jako DT_NTEXT w źródle ODBC.

Nie jestem DBA, więc jest całkiem możliwe, że robię coś naprawdę głupiego. Chciałbym po prostu poznać najlepszy sposób, aby upewnić się, że typy skończą się jako varchary, aby móc pobierać partie. Jakieś pomysły?

W razie potrzeby używam SSIS-BI 2014 w Visual Studio 2013.

Chris Pratt
źródło
3
Kiedy jawnie rzuciłeś je w systemie źródłowym na rozmiar inny niż maksymalny, czy było to w istniejącym przepływie danych, czy stworzyłeś nowy, czy przynajmniej nowy komponent źródłowy? Gdy podasz zapytanie z tymi samymi nazwami kolumn i tylko bardziej szczupłymi typami, czasami nie rejestruje się to jako zmiana, więc edytor nie uruchamia procesu gromadzenia metadanych (co może być kosztowne). Ponadto varchar (maks.) Będzie traktowany jako LOB dla przepływu danych SSIS, co może zaszkodzić agilebi.com/jwelch/2010/05/11/…
billinkc
W komponencie źródła danych ODBC istnieje możliwość wybrania tabeli lub użycia zapytania. Właśnie tam wykonuję casting: w niestandardowym zapytaniu. Wspomniałem, varchar(max)że to tylko skrót do stwierdzenia, że ​​dane kolumny mogą mieścić się w maksymalnym rozmiarze varchara, który wynosi około 4000, dla celów SSIS, tak myślę. Tak naprawdę nie przesyłam niczego varchar(max); chociaż varchar(4000)dla pewności rzuciłem kilka kolumn .
Chris Pratt

Odpowiedzi:

4

Użyłem konwersji danych dla varchara większego niż 128 jako NTEXT, ale to, co usunęło dla mnie błąd, to ostatecznie ustaw wartość Sprawdź poprawność danych zewnętrznych na False.

Ceci
źródło
3

Najwyraźniej sprowadza się to do tego, że SSIS traktuje dowolny varchar większy niż 128 jako NTEXT. Nie pewny dlaczego. Mogę jednak przejść do zaawansowanych właściwości źródła ODBC i zmienić typy z powrotem na coś takiego jak DT_WSTR. Co wydaje się w większości działać.

Jednak ustaliłem, że niektóre tabele, z którymi mam do czynienia, w niektórych swoich kolumnach TEXT przenoszą do 4000 bajtów, więc niestety muszę zostawić te kolumny jako DT_NTEXT, aby zapobiec obcięciu (SSIS nie pozwala ustawiasz typ DT_WSTR z więcej niż 4000 bajtów). Przypuszczam, że w takich przypadkach po prostu utknąłem przy pobieraniu wiersz po rzędzie, ale przynajmniej udało mi się naprawić kilka tabel.

Chris Pratt
źródło
0

To rozwiązanie działało dla mnie:

Usunąłem błąd, zmieniając parametr Max Varchar we właściwości źródła danych. Przejdź do menedżera połączeń. Wybierz opcję kompilacji obok ciągu połączenia. Kliknij przycisk połączenia, aby uzyskać dostęp do większej opcji. Zmień wartość Max Varchar.

wprowadź opis zdjęcia tutaj

Carbon 4horse
źródło
0

W moim przypadku źródłem jest Filemaker ODBC, który również traktuje długi tekst jako typ danych LOB. Mój pakiet był zawieszany przez długi czas z powodu ekstremalnego spadku wydajności dla metody pobierania Wiersz po Wierszu jest wymuszony, ponieważ tabela ma kolumny LOB. Dlatego podczas wdrażania był używany po długim czasie i ostatecznie się nie udawał.

Dzielę się faktycznym rozwiązaniem, które działało dla mnie jak urok. Pobranie jednego dnia o wartości ponad 30 000 danych typu LOB zajęło mi około 10 minut:

Obniż DefaultBufferMaxRows do 1 i zwiększ DefaultBufferSize do maksimum, tj. 100 MB. Następnie zmień źródłowy DSN ODBC, zaznaczając opcję „traktuj tekst jak długi varchar”. I mapuj typy danych od źródła do celu (bez żadnych zmian w zaawansowanym edytorze w źródle).

Shatabdi Das Chowdhury
źródło