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
我有一些疑问和不确定:
- iff 必须指定一个 else 值。我希望它为 null,但该类型不存在,所以我正在使用 Payload。一些我确定它不存在于对象上的字段,所以我有一个空值。这够好了吗?会更好吗?
- 我调用了 3 次 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)))
查看了有关迁移方案的 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
我有一些疑问和不确定:
- iff 必须指定一个 else 值。我希望它为 null,但该类型不存在,所以我正在使用 Payload。一些我确定它不存在于对象上的字段,所以我有一个空值。这够好了吗?会更好吗?
- 我调用了 3 次 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)))