Хранилище данных SQL Azure: максимальный размер типа varchar

Я новичок в Azure, и у меня есть это поле в моей таблице в хранилище данных SQL Azure:

[AnnotationText] varchar(MAX) NULL,

На основе того, что я прочитал из https://docs.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-2017:

  • varchar [(n | max)] Строковые данные переменного размера. Используйте n, чтобы определить размер строки в байтах и ​​может быть значением от 1 до 8000, или используйте max, чтобы указать размер ограничения столбца до максимального хранилища 2 ^ 31-1 байтов (2 ГБ).

Но я вижу размер 8000 с таким сообщением об ошибке:

Too long string in column [-1]: Actual len = [11054]. MaxLEN=[8000]

Я попытался жестко указать размер, но любое число больше 8000 не работает так, как написано в документе.

Также я нашел некоторые документы, в которых говорится, что при создании таблицы следует использовать тип HEAP или CLUSTERED INDEX, но это тоже не помогло

Есть идеи, что пошло не так?


person kee    schedule 09.08.2019    source источник
comment
Не могли бы вы показать запрос, который дает ошибку?   -  person Ron Dunn    schedule 09.08.2019
comment
Я использовал PolyBase через фабрику данных, поэтому показать запрос непросто. Я использовал операцию копирования данных для копирования из базы данных SQL в хранилище данных SQL.   -  person kee    schedule 09.08.2019
comment
Документы ADF, которые (макс.) Типы данных не поддерживаются. docs.microsoft.com/en-us/azure/data-factory/   -  person Ron Dunn    schedule 09.08.2019
comment
@RonDunn Пожалуйста, оставьте свой комментарий в качестве ответа. Спасибо!   -  person Gaurav Mantri    schedule 09.08.2019
comment
Если быть точным, Polybase не поддерживает максимальный тип. Еще раз спасибо @RonDunn и, пожалуйста, опубликуйте его в качестве ответа   -  person kee    schedule 09.08.2019


Ответы (2)


ADF документы, которые (макс.) типы данных не поддерживаются Polybase.

Один из часто используемых методов - это разделение файла в ADF с использованием Polybase для массовой загрузки данных LOB, а затем альтернативный метод добавления данных LOB позже. Другой способ - более быстрый - состоит в том, чтобы разделить столбец с помощью ADF и повторно собрать его, используя представление, наложенное на внешнюю таблицу в точке приема.

Лучшим подходом может быть вопрос, почему LOB-данные требуются в хранилище данных. Можно ли использовать альтернативный подход в зависимости от типа LOB? Например, если большой объект представляет документ, можно ли его передать в хранилище больших двоичных объектов со ссылкой в ​​таблице DW?

person Ron Dunn    schedule 10.08.2019

Я использую Databricks для вставки данных в Azure DW (Synapse) с помощью Polybase. У меня есть столбец nvarchar (500) в моем наборе данных, и у него возникла та же проблема. Я обнаружил, что в моем случае точка разрыва находится где-то между 255 и 300 символами. В итоге я просто выделил этот столбец подстрокой до 250 символов, потому что содержимое не было важно для целей отчетности.

person Tero Kruth    schedule 18.11.2019
comment
Это похоже на совет, поэтому вы можете вставить его как комментарий. Пожалуйста, ознакомьтесь с правилами этого сообщества. - person dpapadopoulos; 18.11.2019
comment
Извините, для комментирования требуется 50 очков репутации, которых у меня нет, но я хотел бы поделиться своим опытом. Я могу удалить свой ответ, если он противоречит правилам. - person Tero Kruth; 19.11.2019
comment
И отвечая на мой собственный ответ, который должен был быть комментарием :). Соединение Databricks с Synapse по умолчанию имеет максимальную длину 256 строк. Вы можете переопределить это, используя параметр maxStrLength. - person Tero Kruth; 20.11.2019