Azure 数据资源管理器在更新策略中应用迁移

Azure Data Explorer apply migration in Update Policy

查看了有关迁移方案的 Azure 数据资源管理器文档,但我没有设法找到关于此的文章。 我想做的是将迁移应用于传入数据,我想将其放入更新策略中。我不知道这是否是个好主意,让我知道。除此之外,我不知道我做的是否足够好,或者是否可以做得更好。

我有 table 个目标和 table 个源。 Source 有一个动态的 Payload 列,如果它有特定的 属性,我将该列映射到 table 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

我有一些疑问和不确定:

  1. iff​​ 必须指定一个 else 值。我希望它为 null,但该类型不存在,所以我正在使用 Payload。一些我确定它不存在于对象上的字段,所以我有一个空值。这够好了吗?会更好吗?
  2. 我调用了 3 次 iff,可以为它创建一个函数吗?如果是,如何以及在哪里?我应该把它也放在更新策略中还是在其他地方定义它?
  3. 可以在一个查询中完成吗?我查看了案例陈述,但我觉得这不会让我的生活更轻松。

谢谢。

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