Синтаксическая ошибка Kusto UDF, если используется в табличном выражении, но не печатается - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть вычислительная тайна [тм]. Рассмотрим этот UDF:

let getdomain = (x: string) {
        toscalar(suffixes|where suf contains x|limit 1)
}

Если я использую его как: print(getdomain("something")), он работает как положено

Если я использую его как: MyTable | extend domain=getdomain(MyTableColumn1), он выдает синтаксическую ошибку

Если я внесу изменение в UDF следующим образом, то табличное выражение неожиданно сработает:

let getdomain = (x: string) {
        toscalar(suffixes|where suf contains "staticstring"|limit 1)
}

, если это имеет значение, суффиксы - это строка строк внешних данных

РЕДАКТИРОВАТЬ: я пришел с этим чудовищем, чтобы преодолеть мою неспособность сделать это динамически, мои суффиксы имеют не более 5 сегментов:

| extend 
 seg1=extract(@"(\w+$)",1,hostname),
 seg2=extract(@"([^.]+\.\w+$)",1,hostname),
 seg3=extract(@"([^.]+\.[^.]+\.\w+$)",1,hostname),
 seg4=extract(@"([^.]+\.[^.]+\.[^.]+\.\w+$)",1,hostname),
 seg5=extract(@"([^.]+\.[^.]+\.[^.]+\.[^.]+\.\w+$)",1,hostname)
|extend 
 seg1match=seg1 in (suffixes),
 seg2match=seg2 in (suffixes),
 seg3match=seg3 in (suffixes),
 seg4match=seg4 in (suffixes),
 seg5match=seg5 in (suffixes)
|extend domain=coalesce(
 iff(seg5match, extract(@"([^.]+\.[^.]+\.[^.]+\.[^.]+\.[^.]+\.\w+$)",1,hostname),""),
 iff(seg4match, seg5,"" ),
 iff(seg3match, seg4,""),
 iff(seg2match, seg3, ""),
 iff(seg1match, seg2,""))

1 Ответ

1 голос
/ 28 февраля 2020

я не думаю, что вы видите синтаксис ошибка.

скорее вы сталкиваетесь с ограничениями на пользовательские функции :

Пользовательские функции не могут передаваться в toscalar() информацию вызова, которая зависит от контекста строки, в которой вызывается функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...