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 SHORT, INT, BIGINT, DECIMAL, DOUBLE
    SHORT INT, BIGINT, DECIMAL, DOUBLE
    INT BIGINT, DECIMAL, DOUBLE
    BIGINT DECIMAL, DOUBLE
    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 11.3 LTS 及更高版本

重命名 Delta Lake 表中的列或字段。

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

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

语法

RENAME COLUMN { column_identifier TO to_column_identifier|
                field_name TO to_field_identifier }

参数

示例

请参阅 ALTER TABLE 示例