1

我正在尝试创建一个函数,该函数将接受标签名称和日期时间值,并在具有该标签的特定表中删除一个范围,然后将具有相同标签和输入日期时间值的新记录摄取到该表中 - 排序'更新'模拟。我不关心性能,它只会保存元数据——最多 20-30 行。

这就是创建表的外观:-

.create table MyTable(sometext:string,somevalue:datetime)

下面显示的是我的函数创建步骤,但失败了:-

.create-or-alter function MyFunction(arg_sometext:string,arg_somedate:datetime) 
{
.drop extents <| .show table MyTable extents where tags has arg_sometext;
.ingest inline into table MyTable with (tags="[arg_sometext]") <| arg_somedate
} 

所以你可以看到我正在尝试做一些简单的事情——我怀疑 Kusto 不允许函数中的命令。是否有任何解决方法可以实现这一目标?

4

1 回答 1

2

通常: Kusto 要求控制命令以点 ( .) 开头,并且它必须是命令文本中的第一个字符。由于查询、函数等不以点开头,因此它们无法调用控制命令。

这是一个有意的限制,可以防止广泛的代码注入攻击。通过实施此规则,Kusto 可以轻松保证任何不以点开头的查询都只能读取数据和元数据,并且永远无法更改它们。

具体来说:关于您的具体情况:

  • 我假设它是自动触发的(即使您确实可以选择创建一个函数),这表明您应该能够使用 Kusto 的 API/客户端库和一个简单的脚本/应用程序来实现您的目标。
  • 另一种可能甚至更好的方法是重新考虑您是否确实需要删除或更新特定记录,或者您可以使用summarize arg_max()它来仅查询记录的最新“版本”(您也可以创建一个封装该逻辑并覆盖表的函数,方法是用表的名称命名函数)。
于 2019-03-27T22:40:48.887 回答