Уникаючи методу отримання "Рядок за рядком" при роботі з вихідними стовпцями LOB


12

У мене є застаріле джерело баз даних PostgreSQL (ODBC), яке я намагаюся перенести на нову схему SQL Server за допомогою SSIS. Я отримую попередження:

Метод отримання "Row by Row" застосовується, оскільки в таблиці є стовпці LOB. Вміст стовпця - LOB

Вся справа в тому, що жоден стовпець насправді не повинен бути LOB. Є кілька типів TEXT, але вони можуть легко вміститися в межах варшара (макс.). Навіть незнайомі, хоча більшість вже є варшарами, але здається, що все, що над varchar (128) трактується так, ніби це LOB (заздалегідь властивості, тип даних - DT_NTEXT).

Я подія спробувала виконати ручну команду SQL, де явно передавала кожен тип рядка варшару відповідної довжини у операторі select, і вони все ще встановлюються як DT_NTEXT у джерелі ODBC.

Я не DBA, тому цілком можливо, я роблю щось по-справжньому дурне. Я просто хотів би знати найкращий спосіб забезпечити, щоб типи виявились варшарами, щоб я міг отримати вибір. Будь-які ідеї?

Якщо це має значення, я використовую SSIS-BI 2014 у Visual Studio 2013.


3
Коли ви явно додали їх у вихідній системі до не макс. Розміру, чи був у існуючому потоці даних чи ви створили новий, або принаймні новий джерельний компонент для нього? Коли ви надаєте запит з тими ж назвами стовпців та просто типовими видами, які іноді не реєструються як зміна, щоб редактор не знімав процес збору метаданих (що може дорого коштувати). Також варчар (макс.) Буде розглядатися як LOB для потоку даних SSIS, що може зашкодити agilebi.com/jwelch/2010/05/11/…
billinkc

У компоненті джерела даних ODBC ви можете вибрати таблицю або використати запит. Саме там я роблю кастинг: у власному запиті. Я згадав varchar(max)як скорочення, сказавши, що дані стовпців можуть відповідати максимальному розміру варшара, який становить близько 4000, для цілей SSIS. Я насправді нічого не кидаю varchar(max); однак я закинув кілька колонок varchar(4000), щоб бути в безпеці.
Кріс Пратт

Відповіді:


4

Я використовував перетворення даних для varchar розміром більше 128 як NTEXT, але те, що усунуло помилку для мене, в кінцевому підсумку - це встановити значення Validate External Data to False.


3

Мабуть, це просто зводиться до SSIS, обробляючи будь-який вархар, більший за 128, як NTEXT. Не знаю чому. Однак я можу зайти в розширені властивості джерела ODBC і змінити типи назад на щось на зразок DT_WSTR. Що, здається, працює здебільшого.

Однак я визначив, що кілька таблиць, з якими я маю справу, несуть понад 4000 байт в деяких їх колонках TEXT, тому я, на жаль, повинен залишити ці стовпчики як DT_NTEXT, щоб запобігти усіченню (SSIS не дозволить ви встановлюєте тип DT_WSTR з більш ніж 4000 байтами). Я гадаю, що в цих випадках я просто застряг із строком за рядком, але принаймні мені вдалося виправити кілька таблиць.


0

Це рішення працювало для мене:

Я усунув помилку, змінивши параметр Max Varchar у властивості джерела даних. Перейдіть до менеджера з'єднань. Виберіть параметр збірки поруч із рядком з'єднання. Клацніть на кнопку підключення, щоб отримати доступ до більшої опції. Змініть значення Макс Варчара.

введіть тут опис зображення


0

У моєму випадку джерелом є ODBC Filemaker, який також розглядає довгий текст як тип даних LOB. Мій пакунок, який звисав довгий час через надзвичайне зниження продуктивності для методу вилучення Row by Row, застосовується через те, що в таблиці є стовпці LOB. Таким чином, під час розгортання він використовував тайм-аут через тривалий час і в кінцевому підсумку виходив з ладу.

Я ділюсь власне рішенням, яке для мене спрацювало як шарм. Один день вартістю понад 30 кб типу LOB займав приблизно 10 хвилин для мене ::

Опустіть DefaultBufferMaxRows до 1 і збільшить DefaultBufferSize до максимального, тобто 100 Мб. Потім змініть вихідний ODBC DSN, встановивши параметр "обробляти текст як довгий варчар". І картографуйте типи даних як від джерела до цілі (без будь-яких змін у розширеному редакторі в джерелі).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.