ALTER TABLE COLUMN 子句

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

在 Delta Lake 表中添加、修改或删除列,或者在 Delta Lake 表列中添加、修改或删除字段。

所需的权限

如果使用 Unity Catalog,则必须具有 MODIFY 权限:

  • ALTER COLUMN
  • ADD COLUMN
  • DROP COLUMN

所有其他操作都需要表的所有权。

语法

ALTER TABLE table_name
   { ADD COLUMN clause |
     ALTER COLUMN clause |
     DROP COLUMN clause |
     RENAME COLUMN clause }

ADD COLUMN 子句

JDBC 数据源不支持此子句。

向表添加一列或多列,或将字段添加到 Delta Lake 表中的现有列。

注意

向现有 Delta 表添加列时,无法定义 DEFAULT 值。 对于现有行,添加到 Delta 表的所有列均视为 NULL。 添加列后,你可以有选择地定义列的默认值,但这仅适用于插入表中的新行。 使用以下语法:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

语法

{ ADD [ COLUMN | COLUMNS ]
  ( { { column_identifier | field_name } data_type
      [ DEFAULT clause ] [ COMMENT comment ] [ FIRST | AFTER identifier ]
      [ MASK clause ] } [, ...] ) }

参数

  • column_identifier

    要添加的列的名称。 名称在表中必须唯一。

    除非指定了 FIRSTAFTER name,否则列或字段将追加到末尾。

  • field_name

    要添加到现有列的字段的完全限定名称。 嵌套字段的路径的所有组件都必须存在,并且字段名称本身必须唯一。

  • DEFAULT default_expression

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 11.3 LTS 及更高版本

    为列定义一个 DEFAULT 值,当未指定该列时,将在 INSERTMERGE ... INSERT 上使用该值。

    如果未指定默认值,则暗示 DEFAULT NULL 将用于可为空的列。

    default_expression 可由字面量和内置 SQL 函数或运算符组成,但以下函数除外:

    default_expression 不得包含任何子查询

    CSVJSONPARQUETORC 源支持 DEFAULT

  • data_type

    指定列或字段的数据类型。 并非所有数据源都支持 Azure Databricks 支持的所有数据类型

  • COMMENT comment

    描述添加的列或字段的可选 STRING 文本。

  • FIRST

    如果指定,则列将添加为表的第一列,或者该字段将添加为包含结构中的 的第一个字段。

  • AFTERidentifier

    如果指定,则列或字段将立即添加到字段或列 identifier 之后。

  • MASK 子句

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 12.2 LTS 及更高版本 勾选“是” 仅 Unity Catalog

    重要

    此功能目前以公共预览版提供。

    添加列掩码函数以对敏感数据进行匿名化处理。 该列的所有后续查询将会收到对该列计算该函数(而不是该列的原始值)的结果。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以确定是否编辑该值。

ALTER COLUMN 子句

适用于: 勾选“是” Databricks SQL 勾选“是” Databricks Runtime

更改属性或列的位置。

语法

{ { ALTER | CHANGE } [ COLUMN ] { column_identifier | field_name }
  { COMMENT comment |
    { FIRST | AFTER column_identifier } |
    { SET | DROP } NOT NULL |
    TYPE data_type |
    SET DEFAULT clause |
    DROP DEFAULT |
    SYNC IDENTITY |
    SET { MASK clause } |
    DROP MASK |
    SET TAGS clause |
    UNSET TAGS clause } }

参数

  • column_identifier

    要更改的列的名称。

  • field_name

    要更改的字段的完全限定名称。 嵌套字段的路径的所有组件都必须存在。

  • COMMENT comment

    更改 column_name 列的说明。 comment 必须是 STRING 文本。

  • FIRSTAFTER 标识符

    将列从当前位置移到前面(FIRST)或立即移动到 identifier 之后(AFTER)。 只有 table_name 为 Delta 表时才支持此子句。

  • TYPEdata_type

    适用于 勾选“是” Databricks SQL 勾选“是” Databricks Runtime 15.2 及更高版本

    更改 column_name 列的数据类型。

    只有 table_name 为 Delta 表时才支持此子句。

    所有 Delta 表都支持以下类型更改:

    • 例如,将 VARCHAR 列的大小从 VARCHAR(5) 增加到 VARCHAR(10)
    • CHAR 列的类型更改为 VARCHAR,例如,从 CHAR(5) 更改为 VARCHAR(5)
    • CHARVARCHAR 列的类型更改为 STRING,例如,从 VARCHAR(10) 更改为 STRING

    如果将 delta.enableTypeWidening 设置为 true,则 Delta 表支持以下类型更改:

    重要

    此功能在 Databricks Runtime 15.2 及更高版本中作为公共预览版提供。

    源类型 支持的更广泛类型
    BYTE SHORTINTBIGINTDECIMALDOUBLE
    SHORT INTBIGINTDECIMALDOUBLE
    INT BIGINTDECIMALDOUBLE
    BIGINT DECIMALDOUBLE
    FLOAT DOUBLE
    DECIMAL 具有更高精度和小数位数的 DECIMAL
    DATE TIMESTAMP_NTZ

    有关类型扩大的更多详细信息,请参阅类型扩大

  • SET NOT NULLDROP NOT NULL

    更改有效列值的域以排除 null(SET NOT NULL)或包含 null(DROP NOT NULL)。 只有 Delta Lake 表支持此选项。 Delta Lake 将确保约束对所有现有和新数据有效。

  • SYNC IDENTITY

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 10.4 LTS 及更高版本

    将标识列的元数据与实际数据同步。 将自己的值写入标识列时,它可能与元数据不一致。 此选项可评估状态并更新元数据,以使其与实际数据保持一致。 在此命令后,下一个自动分配的标识值将从 start + (n + 1) * step 开始,其中 n 是满足 start + n * step >= max() 的最小值(针对正步骤)。

    仅 Delta Lake 表上的标识列支持此选项。

  • DROP DEFAULT

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 11.3 LTS 及更高版本

    从列中移除默认表达式。 对于可为空的列,这相当于 SET DEFAULT NULL。 对于使用 NOT NULL 定义的列,需要为以后的每个 INSERT 操作提供一个值

  • SET DEFAULT default_expression

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 11.3 LTS 及更高版本

    为列定义一个 DEFAULT 值,当未指定该列时,将在 INSERTMERGE ... INSERT 上使用该值。

    如果未指定默认值,则暗示 DEFAULT NULL 将用于可为空的列。

    default_expression 可由字面量、内置 SQL 函数或运算符组成,但以下函数除外:

    default_expression 不得包含子查询

    CSVJSONORCPARQUET 源支持 DEFAULT

    为新添加的列定义默认值时,默认值适用于所有预先存在的行。 如果默认值包含非确定性函数(例如 randcurrent_timestamp),则在执行 ALTER TABLE 时计算一次值,并将其作为常数应用于预先存在的行。 对于新插入的行,将对每行运行默认表达式一次。

    使用 ALTER COLUMN 设置默认值时,现有行不受该更改的影响。

  • SETMASK 子句

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 12.2 LTS 及更高版本 勾选“是” 仅 Unity Catalog

    重要

    此功能目前以公共预览版提供。

    添加列掩码函数以对敏感数据进行匿名化处理。 该列的所有后续查询将会收到对该列计算该函数(而不是该列的原始值)的结果。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以确定是否编辑该值。

  • DROP MASK

    适用于:勾选“是” 仅 Unity Catalog

    重要

    此功能目前以公共预览版提供。

    移除此列的列掩码(如果有)。 将来从此列进行查询会收到此列的原始值。

  • SET TAGS ( { tag_name = tag_value } [, ...] )

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 13.3 LTS 及更高版本

    将标记应用于列。 需要具有 APPLY TAG 权限才能向列添加标记。

    • tag_name

      文本 STRINGtag_name 在表或列中必须唯一。

    • tag_value

      文本 STRING

  • UNSET TAGS ( tag_name [, ...] )

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 13.3 LTS 及更高版本

    从列中移除标记。 需要具有 APPLY TAG 权限才能从列中移除标记。

    • tag_name

      文本 STRINGtag_name 在表或列中必须唯一。

DROP COLUMN 子句

重要

此功能目前以公共预览版提供。

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 11.3 LTS 及更高版本

删除 Delta Lake 表中的一列或多列或字段。

删除列或字段时,必须删除相关检查约束和生成的列。

有关要求,请参阅使用 Delta Lake 列映射重命名和删除列

语法

DROP [COLUMN | COLUMNS] [ IF EXISTS ] ( { {column_identifier | field_name} [, ...] )

参数

  • IF EXISTS

    指定 IF EXISTS 时,Azure Databricks 会忽略删除不存在的列的尝试。 否则,删除不存在的列将导致错误。

  • column_identifier

    现有列的名称。

  • field_name

    现有字段的完全限定名称。

RENAME COLUMN 子句

重要

此功能目前以公共预览版提供。

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 10.4 LTS 及更高版本

重命名启用了列映射的 Delta Lake 表中的列或字段。

重命名列或字段时,还需要更改相关检查约束和生成的列。 将删除使用该列的任何主键和外键。 对于外键,必须拥有在其中定义外键的表。

有关要求以及如何启用列映射,请参阅使用 Delta Lake 列映射重命名和删除列

语法

RENAME COLUMN { column_identifier TO to_column_identifier|
                field_name TO to_field_identifier }

参数

示例

请参阅 ALTER TABLE 示例