Migration Azure Data Explorer在更新策略中应用迁移

Migration Azure Data Explorer在更新策略中应用迁移,migration,azure-data-explorer,kql,Migration,Azure Data Explorer,Kql,查看了所有Azure Data Explorer文档以了解迁移场景,但我没有找到关于此的文章。 我想做的是将迁移应用到传入的数据,我想把它放在更新策略中。我不知道这是不是一个好主意,让我知道。除此之外,我不知道我所做的是否足够好,或者是否可以做得更好 我有表目标和表源。源有一个动态有效负载列,如果该列具有特定属性,我将该列映射到表目标。我是这样做的: let new_data = Source | where Payload.Name == 'NameImLookingFor' ; let go

查看了所有Azure Data Explorer文档以了解迁移场景,但我没有找到关于此的文章。 我想做的是将迁移应用到传入的数据,我想把它放在更新策略中。我不知道这是不是一个好主意,让我知道。除此之外,我不知道我所做的是否足够好,或者是否可以做得更好

我有表目标和表源。源有一个动态有效负载列,如果该列具有特定属性,我将该列映射到表目标。我是这样做的:

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
我有一些问题和不确定性:

  • iff必须指定一个else值。我希望它为null,但该类型不存在,所以我使用的是有效负载。某个字段,我确信它在对象上不存在,所以我有一个空值。这够好吗?会更好吗
  • 我打了三次iff,能为它做个函数吗?如果是,如何以及在哪里?我应该把它也放在更新策略中,还是在其他地方定义它
  • 可以在一个查询中完成吗?我查看了案例陈述,但我不觉得这会让我的生活更轻松

  • 谢谢。

    使用更新策略是有效的(不过,理想情况下,如果可能的话,您应该在将数据导入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)))