Azure Data Explorer применяет миграцию в политике обновления

Просмотрел всю документацию по 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

У меня есть некоторые вопросы и неясности:

  1. iff должен иметь указанное значение else. Я хочу, чтобы он был нулевым, но такого типа не существует, поэтому я использую Payload. какое-то поле, которое, я уверен, не существует в объекте, поэтому у меня есть пустое значение. Достаточно ли этого? Может быть лучше?
  2. Я вызываю этот iff 3 раза, можно ли сделать для него функцию? Если да, то как и где? Должен ли я поместить это также в политику обновления или определить его где-то еще?
  3. Можно ли это сделать в одном запросе? Я просмотрел выписку по делу, но не чувствовал, что это облегчит мою жизнь.

Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование политики обновления является допустимым (хотя в идеале вы должны исправить данные в их источнике, если это возможно, до загрузки в 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)))

Другие вопросы по теме