データ損失なしで列の種類を変更する
.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