Табличные типы данных в Synapse SQL

В этой статье содержатся рекомендации по определению табличных типов данных в выделенном пуле Synapse SQL.

Типы данных

Выделенный пул Synapse SQL поддерживает самые распространенные типы данных. Список поддерживаемых типов данных см. в типах данных в инструкции CREATE TABLE. Сведения о бессерверном пуле Synapse SQL см. в статьях Отправка запросов к файлам хранилища с помощью бессерверного пула SQL в Azure Synapse Analytics и Использование OPENROWSET с бессерверным пулом SQL в Azure Synapse Analytics

Уменьшение длины строки

Уменьшение размера типов данных сокращает длину строки, что улучшает производительность запросов. Используйте наименьший тип данных для данных.

  • Не рекомендуется использовать по умолчанию длинные значения столбцов. Например, если самое длинное значение состоит из 25 знаков, столбец необходимо определить как VARCHAR(25).
  • Не нужно использовать NVARCHAR, если вам требуется только VARCHAR.
  • По возможности используйте NVARCHAR(4000) или VARCHAR(8000) вместо NVARCHAR(MAX) или VARCHAR(MAX).
  • Старайтесь не использовать числа с плавающей точкой и десятичные числа с нулевой (0) шкалой. Вместо них следует использовать значения TINYINT, SMALLINT, INT или BIGINT.

Примечание.

Если для загрузки таблиц Synapse SQL используются внешние таблицы PolyBase, определенная длина строки таблицы не должна превышать 1 МБ. Если строка с данными переменной длины превышает 1 МБ, можно загрузить строку с помощью BCP, а не PolyBase.

Определение неподдерживаемых типов данных

Если вы переносите базу данных из другой базы данных SQL, вы можете обнаружить некоторые типы данных, не поддерживаемые в Synapse SQL. Используйте этот запрос для определения неподдерживаемых типов данных в существующей схеме SQL.

SELECT  t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables  t
JOIN sys.columns c on t.[object_id]    = c.[object_id]
JOIN sys.types   y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','xml')
 OR  y.[is_user_defined] = 1;

Обходные решения для неподдерживаемых типов данных

Ниже перечислены типы данных, которые не поддерживаются в Synapse SQL, и доступные варианты замены для них.

Неподдерживаемые типы данных Обходное решение
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
Изображение varbinary
text varchar
ntext nvarchar
sql_variant Разделите столбец на несколько строго типизированных столбцов.
table Преобразуйте во временные таблицы или сохраните в хранилище с помощью CETAS.
timestamp Для использования datetime2 и функции CURRENT_TIMESTAMP внесите изменения в код. По умолчанию поддерживаются только константы, поэтому нельзя использовать current_timestamp как ограничение по умолчанию. Если нужно перенести значения версии строки из типизированного столбца timestamp, используйте BINARY(8) или VARBINARY(8) в качестве значений версии строки NOT NULL или NULL.
xml varchar
Определяемый пользователем тип По возможности выполните преобразование в исходный тип данных.
Значения по умолчанию Значения по умолчанию поддерживают только литералы и константы.

Следующие шаги

Дополнительные сведения о разработке таблиц см. в статье Общие сведения о проектировании таблиц в хранилище данных SQL Azure.