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 ] } [, ...] ) }
参数
-
要添加的列的名称。 名称在表中必须唯一。
除非指定了
FIRST
或AFTER name
,否则列或字段将追加到末尾。 -
要添加到现有列的字段的完全限定名称。 嵌套字段的路径的所有组件都必须存在,并且字段名称本身必须唯一。
DEFAULT default_expression
适用于:Databricks SQL Databricks Runtime 11.3 LTS 及更高版本
为列定义一个
DEFAULT
值,当未指定该列时,将在INSERT
和MERGE ... INSERT
上使用该值。如果未指定默认值,则暗示
DEFAULT NULL
将用于可为空的列。default_expression
可由字面量和内置 SQL 函数或运算符组成,但以下函数除外:default_expression
不得包含任何子查询。CSV
、JSON
、PARQUET
和ORC
源支持DEFAULT
。-
指定列或字段的数据类型。 并非所有数据源都支持 Azure Databricks 支持的所有数据类型。
COMMENT comment
描述添加的列或字段的可选
STRING
文本。如果要为 Unity Catalog 管理的表或表列添加 AI 生成的注释,请参阅向表添加 AI 生成的注释。
FIRST
如果指定,则列将添加为表的第一列,或者该字段将添加为包含结构中的 的第一个字段。
AFTER
identifier如果指定,则列或字段将立即添加到字段或列
identifier
之后。-
适用于: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 |
SET DEFAULT clause |
DROP DEFAULT |
SYNC IDENTITY |
SET { MASK clause } |
DROP MASK |
SET TAGS clause |
UNSET TAGS clause } }
参数
-
要更改的列的名称。
-
要更改的字段的完全限定名称。 嵌套字段的路径的所有组件都必须存在。
COMMENT comment
更改
column_name
列的说明。comment
必须是STRING
文本。FIRST
或AFTER
标识符将列从当前位置移到前面(
FIRST
)或立即移动到identifier
之后(AFTER
)。 只有table_name
为 Delta 表时才支持此子句。SET NOT NULL
或DROP 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
值,当未指定该列时,将在INSERT
和MERGE ... INSERT
上使用该值。如果未指定默认值,则暗示
DEFAULT NULL
将用于可为空的列。default_expression
可由字面量、内置 SQL 函数或运算符组成,但以下函数除外:default_expression
不得包含子查询。CSV
、JSON
、ORC
和PARQUET
源支持DEFAULT
。为新添加的列定义默认值时,默认值适用于所有预先存在的行。 如果默认值包含非确定性函数(例如
rand
或current_timestamp
),则在执行ALTER TABLE
时计算一次值,并将其作为常数应用于预先存在的行。 对于新插入的行,将对每行运行默认表达式一次。使用
ALTER COLUMN
设置默认值时,现有行不受该更改的影响。SET
MASK 子句适用于: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
文本
STRING
。tag_name
在表或列中必须唯一。tag_value
文本
STRING
。
UNSET TAGS ( tag_name [, ...] )
适用于: Databricks SQL Databricks Runtime 13.3 LTS 及更高版本
从列中移除标记。 需要具有
apply_tag
权限才能从列中移除标记。tag_name
文本
STRING
。tag_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 会忽略删除不存在的列的尝试。 否则,删除不存在的列将导致错误。-
现有列的名称。
-
现有字段的完全限定名称。
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 示例。