Поделиться через


Изменение типа столбца без потери данных

Область применения: ✅Microsoft Fabric✅Azure Data Explorer

Команда alter column изменяет тип столбца , что делает исходные данные неустранимыми. Чтобы сохранить существующие данные при изменении типа столбца, создайте новую, правильно типизированные таблицы.

Для каждой таблицы OriginalTable , в которую вы хотите изменить тип столбца, выполните следующие действия:

  1. Создайте таблицу NewTable с правильной схемой (правильные типы столбцов и тот же порядок столбцов).

  2. Прием данных NewTable из OriginalTable, применение необходимых преобразований данных. В следующем примере Col1 преобразуется в тип данных строки.

    .set-or-append NewTable <| OriginalTable | extend Col1=tostring(Col1)
    
  3. Используйте команду "Переименовать таблицы" для замены имен таблиц.

    .rename tables NewTable=OriginalTable, OriginalTable=NewTable
    

    После завершения команды новые данные из существующих конвейеров OriginalTable приема передаются правильно.

  4. Удалите таблицу NewTable.

    NewTable включает только копию исторических данных до изменения схемы. Его можно безопасно удалить после подтверждения схемы и данных в OriginalTable правильном обновлении.

    .drop table NewTable
    

Пример

В следующем примере схема обновляется OriginalTable при сохранении данных.

Создайте таблицу OriginalTableс столбцом "Col1" guid типа.

.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