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
文本。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 |
TYPE data_type |
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 表时才支持此子句。TYPE
data_type适用于 Databricks SQL Databricks Runtime 15.2 及更高版本
更改
column_name
列的数据类型。只有
table_name
为 Delta 表时才支持此子句。所有 Delta 表都支持以下类型更改:
- 例如,将
VARCHAR
列的大小从VARCHAR(5)
增加到VARCHAR(10)
- 将
CHAR
列的类型更改为VARCHAR
,例如,从CHAR(5)
更改为VARCHAR(5)
- 将
CHAR
或VARCHAR
列的类型更改为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 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 10.4 LTS 及更高版本
重命名启用了列映射的 Delta Lake 表中的列或字段。
重命名列或字段时,还需要更改相关检查约束和生成的列。 将删除使用该列的任何主键和外键。 对于外键,必须拥有在其中定义外键的表。
有关要求以及如何启用列映射,请参阅使用 Delta Lake 列映射重命名和删除列。
语法
RENAME COLUMN { column_identifier TO to_column_identifier|
field_name TO to_field_identifier }
参数
-
列的现有名称。
-
新的列标识符。 标识符在表中必须是唯一的。
-
字段的现有完全限定名称。
-
新的字段标识符。 标识符在本地结构中必须是唯一的。
示例
请参阅 ALTER TABLE 示例。