Просмотрел всю документацию по Azure Data Explorer для сценариев миграции, и мне не удалось найти статью об этом. Что я пытаюсь сделать, так это применить миграцию к входящим данным, и я подумал о том, чтобы поместить ее в политику обновления. Я не знаю, хорошая это идея или нет, дайте мне знать. Помимо этого, я не знаю, достаточно ли хорошо то, что я делаю, или это можно было бы сделать лучше.
У меня есть таблица Target и таблица Source. Источник имеет динамический столбец полезной нагрузки, и я сопоставляю этот столбец с таблицей Target, если он имеет определенное свойство. Я сделал это так:
let new_data = Source
| where Payload.Name == 'NameImLookingFor'
;
let good_data = new_data
| where isnull(Payload.DeprecatedField)
| project
FieldA = todouble(Payload.FieldA),
FieldB = todouble(Payload.FieldB),
FieldC = todouble(Payload.FieldC)
;
let migrated_data = new_data
| where isnotnull(Payload.DeprecatedField)
| project
FieldA = iff(toint(Payload.DeprecatedField)==0,todouble(Payload.DeprecatedFieldValue), Payload.UndefinedMemeber),
FieldB = iff(toint(Payload.DeprecatedField)==1,todouble(Payload.DeprecatedFieldValue), Payload.UndefinedMemeber),
FieldC = iff(toint(Payload.DeprecatedField)==2,todouble(Payload.DeprecatedFieldValue), Payload.UndefinedMemeber)
;
good_data
| union migrated_data
У меня есть некоторые вопросы и неясности:
Спасибо.
Использование политики обновления является допустимым (хотя в идеале вы должны исправить данные в их источнике, если это возможно, до загрузки в Kusto/ADX).
Вы можете заменить свою логику следующим:
Source
| where Payload.Name == 'NameImLookingFor'
| extend df = toint(Payload.DeprecatedField)
| project FieldA = case(isnull(df), todouble(Payload.FieldA), case(df == 0, todouble(Payload.DeprecatedFieldValue), double(null))),
FieldB = case(isnull(df), todouble(Payload.FieldB), case(df == 1, todouble(Payload.DeprecatedFieldValue), double(null))),
FieldC = case(isnull(df), todouble(Payload.FieldC), case(df == 2, todouble(Payload.DeprecatedFieldValue), double(null)))