在不丢失数据的情况下更改列类型
适用于:✅Azure 数据资源管理器
.alter column 命令会更改列类型,使原始数据无法恢复。 若要在更改列类型时保留预先存在的数据,可新建正确类型的表。
对于要在其中更改列类型的每个表 OriginalTable
,请执行以下步骤:
使用正确的架构(正确的列类型和相同的列顺序)创建表
NewTable
。将数据从
OriginalTable
引入NewTable
,应用所需的数据转换。 在下面的示例中,将 Col1 转换为字符串数据类型。.set-or-append NewTable <| OriginalTable | extend Col1=tostring(Col1)
使用 .rename tables 命令交换表单名称。
.rename tables NewTable=OriginalTable, OriginalTable=NewTable
命令完成后,现有引入管道中的新数据将流向现已正确键入的
OriginalTable
。删除表
NewTable
。NewTable
仅包含架构更改之前的历史数据副本。 确认OriginalTable
中的架构和数据已正确更新后,可以安全地删除。.drop table NewTable
示例
以下示例会在保留数据时更新 OriginalTable
的架构。
使用 guid 类型的列“Col1”来创建表 OriginalTable
。
.create table OriginalTable (Col1:guid, Id:int)
然后将数据引入 OriginalTable
。
.ingest inline into table OriginalTable <|
b642dec0-1040-4eac-84df-a75cfeba7aa4,1
c224488c-ad42-4e6c-bc55-ae10858af58d,2
99784a64-91ad-4897-ae0e-9d44bed8eda0,3
d8857a93-2728-4bcb-be1d-1a2cd35386a7,4
b1ddcfcc-388c-46a2-91d4-5e70aead098c,5
创建字符串类型的表 NewTable
。
.create table NewTable (Col1:string, Id:int)
将数据从 OriginalTable
追加到 NewTable
,并使用 tostring()
函数将“Col1”列从 guid 类型转换为字符串类型。
.set-or-append NewTable <| OriginalTable | extend Col1=tostring(Col1)
交换表单名称。
.rename tables NewTable = OriginalTable, OriginalTable = NewTable
删除包含旧架构和数据的表 NewTable
。
.drop table NewTable