Динамическая обрезка данных до 4000 символов при копировании в ADW с помощью фабрики данных Azure.

Я получаю следующую ошибку при копировании данных из большого двоичного объекта в хранилище данных Azure:

"errorCode": "2200", "message": "ErrorCode=FailedDbOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Произошла ошибка при загрузке данных в хранилище данных SQL.,Source=Microsoft.DataTransfer.ClientLibrary ,''Type=System.Data.SqlClient.SqlException,Message=HdfsBridge::recordReaderFillBuffer - Произошла непредвиденная ошибка при заполнении буфера средства чтения записей: HadoopExecutionException: Слишком длинная строка в столбце [-1]: Actual len = [4251]. MaxLEN=[ 3999], Source = .Net поставщик данных SqlClient, SqlErrorNumber = 107090, Class = 16, ErrorCode = -2146232060, State = 1, Errors = [{Class = 16, Number = 107090, State = 1, Message = HdfsBridge::recordReaderFillBuffer - Произошла непредвиденная ошибка при заполнении буфера чтения записи: HadoopExecutionException: слишком длинная строка в столбце [-1]: Actual len = [4251]. MaxLEN=[3999],},],'", "failureType": "UserError", " цель": "Копировать в ADW"

Как обрезать данные при копировании в ADW без внесения каких-либо изменений в исходные данные?


person Megha Agarwal    schedule 07.01.2019    source источник
comment
Можете ли вы подробно описать определение столбца внешней таблицы и какие данные копируются из источника данных во внешнюю таблицу?   -  person Mike Ubezzi MSFT    schedule 08.01.2019
comment
@Mike Ubezzi MSFT - это определение столбца: [CRM_Note_Description] [nvarchar](3999) NULL. Я не понял 2-ю часть вопроса. Если вы спрашиваете, какой разделитель используется, то это разделитель SOH.   -  person Megha Agarwal    schedule 08.01.2019
comment
В DWH вы импортируете данные во внешнюю (промежуточную) таблицу (пример: ext.crm_note_descption) из внешнего источника данных, а затем запускаете второе задание для импорта в рабочую таблицу (dbo.crm_note_description). Вы определили эту внешнюю таблицу как nvarchar. Содержит ли содержимое CRM_Note_Description какие-либо двухбайтовые символы или дополнительные символы, которые вам больше не нужны? Вы можете использовать метод ELT для загрузки данных: docs.microsoft.com/en-us/azure/sql-data-warehouse/   -  person Mike Ubezzi MSFT    schedule 09.01.2019
comment
Если вам абсолютно необходимы все данные в столбце, вы можете использовать nvarchar (max): docs.microsoft.com/en-us/sql/t-sql/data-types/ (используйте nvarchar (макс.), когда размеры записей данных столбца значительно различаются, а длина строки может превышать 4000 пар байтов).   -  person Mike Ubezzi MSFT    schedule 09.01.2019
comment
@ Mike Ubezzi MSFT - Не могли бы вы рассказать подробнее, как мне это сделать? Для получения дополнительной информации мы уже используем механизм Polybase для загрузки данных из большого двоичного объекта Azure в ADW в ADF. Далее следует последовательность действий: поиск -> CopyToADW.   -  person Megha Agarwal    schedule 09.01.2019
comment
Кроме того, это внутренняя таблица, которую я создал в ADW, а внешние таблицы не создавались. Итак, учитывая этот сценарий, как вы предлагаете изменить существующую активность и загрузить ее в ADW?   -  person Megha Agarwal    schedule 09.01.2019
comment
Вот почему я объяснил двухэтапный процесс, чтобы дать некоторое представление о передовой практике импорта данных. Вы можете создать внешнюю таблицу (таблицы) как nvarchar (max), запустить процесс очистки данных столбца, чтобы удалить ненужные данные, а затем перенести данные в окончательную (внутреннюю) таблицу. При этом следуйте инструкциям в этой теме: stackoverflow.com/questions/10608310/ (ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max))   -  person Mike Ubezzi MSFT    schedule 09.01.2019