Не удалось преобразовать аргумент 2 в скалярную константу при использовании replace()

#azure-data-explorer #kql

#azure-data-explorer #kql

Вопрос:

Я пытаюсь использовать replace , когда 2-м аргументом функции является поле столбца:

 replace("bla", column1Field, orignalString)
  

Но я получаю следующую ошибку:

 replace(): failed to cast argument 2 to scalar constant
  

Почему я получаю эту ошибку и как по-прежнему использовать поле столбца с этими функциями?

Комментарии:

1. Привет @Ace, пожалуйста, ознакомьтесь с моим обновленным ответом на ваш вопрос.

Ответ №1:

Обновление от июля 2021:

replace() Функция была заменена на replace_regex() (просто обратите внимание, что порядок аргументов изменился). replace_regex() ожидает поиск регулярных выражений, и он должен быть константой, потому что Kusto «компилирует» его, и было бы плохо с точки зрения производительности делать это для каждой записи.

И есть новая replace_string() функция, которая позволяет вам делать именно то, что вы хотите: заменять одну строку другой (обе могут быть неконстантными). Итак, в вашем случае вам следует использовать replace_string(orignalString, "bla", column1Field)

Старый ответ:

2-й аргумент replace() должен быть константой, потому что Kusto «компилирует» его, и было бы плохо с точки зрения производительности делать это для каждой записи.

Пример (из документа):

 range x from 1 to 5 step 1
| extend str=strcat('Number is ', tostring(x))
| extend replaced=replace(@'is (d )', @'was: 1', str)
  

Как вы можете видеть, второй параметр содержит 1 , который будет принимать значение в str, которое соответствует тому, что находится внутри () s в регулярном выражении, которое является первым параметром.