Поделиться через


Расширение типов

Внимание

Эта функция доступна в общедоступной предварительной версии в Databricks Runtime 15.2 и выше.

Таблицы с включенным расширением типов позволяют изменять типы данных столбцов на более широкий тип без перезаписи базовых файлов данных. Можно изменить типы столбцов вручную или использовать эволюцию схемы для развития типов столбцов.

Для расширения типов требуется Delta Lake. Все управляемые таблицы каталога Unity используют Delta Lake по умолчанию.

Поддерживаемые изменения типов

Типы можно расширить в соответствии со следующими правилами:

Тип источника Поддерживаемые более широкие типы
byte short, int, long, decimal, double
short int, long, decimal, double
int long, , decimaldouble
long decimal
float double
decimal decimal с большей точностью и масштабированием
date timestampNTZ

Чтобы избежать случайного повышения целочисленных значений в десятичные разряды, необходимо вручную зафиксировать изменения типов с byte, short, intили long на decimal или double.

Примечание.

При изменении любого числового типа на decimalобщая точность должна быть равна или больше начальной точности. При увеличении масштаба общая точность должна увеличиваться на соответствующую сумму.

Минимальное целевое значение для типов byte, shortи intdecimal(10,0). Минимальная цель для longdecimal(20,0).

Если вы хотите добавить два десятичных разряда к полю с decimal(10,1), минимальное значение — decimal(12,3).

Изменения типов поддерживаются для столбцов и полей верхнего уровня, вложенных в структуры, карты и массивы.

Включение расширения типов

Вы можете включить расширение типов в существующей таблице, задав для свойства таблицы delta.enableTypeWidening значение true:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')

Вы также можете включить расширение типов во время создания таблицы:

  CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')

Внимание

При включении расширения типов устанавливается функция таблицы typeWidening-preview, которая обновляет протоколы чтения и записи. Для взаимодействия с таблицами с включенным расширением типов необходимо использовать Databricks Runtime 15.2 или более поздней версии. Если внешние клиенты также взаимодействуют с таблицей, убедитесь, что они поддерживают эту функцию таблицы. См. статью Как Azure Databricks управляет совместимостью функций Delta Lake?.

Применение изменения типа вручную

ALTER COLUMN Используйте команду для ручного изменения типов:

ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>

Эта операция обновляет схему таблицы без перезаписи базовых файлов данных.

Расширенные типы с автоматической эволюцией схемы

Эволюция схемы работает с расширением типов для обновления типов данных в целевых таблицах в соответствии с типом входящих данных.

Примечание.

Без включения расширения типа эволюция схемы всегда пытается безопасно понизить данные, чтобы соответствовать типам столбцов в целевой таблице. Если вы не хотите автоматически расширить типы данных в целевых таблицах, отключите расширение типов перед запуском рабочих нагрузок с включенной эволюцией схемы.

Чтобы использовать эволюцию схемы для расширения типа данных столбца, необходимо выполнить следующие условия:

  • Команда использует INSERT или MERGE INTO.
  • Команда выполняется с включенной автоматической эволюцией схемы.
  • Целевая таблица имеет поддержку расширения типа.
  • Тип исходного столбца шире, чем тип целевого столбца.
  • Расширение типов поддерживает изменение типа.

Несоответствия типов, которые не соответствуют всем этим условиям, подчиняются обычным правилам применения схемы. См. проверка соблюдения схемы.

Отключение функции расширения типа таблицы

Чтобы предотвратить расширение случайного типа в включенных таблицах, присвоив свойству значение false:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')

Этот параметр предотвращает изменения будущих типов в таблице, но не удаляет функцию расширения типов или отменяет изменения типов.

Если необходимо полностью удалить функции таблицы расширения типа, можно использовать команду DROP FEATURE, как показано в следующем примере:

 ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]

При удалении расширения типов все файлы данных, которые не соответствуют текущей схеме таблицы, перезаписываются. См. функции таблицы Drop Delta.