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


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

Внимание

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

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

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

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

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

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

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

Примечание.

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

Минимальный целевой объект для byteтипов и shortint типовdecimal(10,0). Минимальный целевой объект для long decimal(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.