У меня есть вычислительная тайна [тм]. Рассмотрим этот 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,""))