无法在Kusto的用户定义功能中使用命令

时间:2019-03-27 22:24:23

标签: kusto azure-data-explorer

我正在尝试创建一个函数,该函数将接受标记的名称和日期时间值,并在具有该标记的特定表中放置一个范围,然后将具有相同标记和输入日期时间值的新记录提取到该表中-有点“更新”模拟。我并不担心性能,它只是保存元数据-最多可能容纳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不允许在函数中使用命令。有什么解决方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

特别是:关于您的特定情况:

  • 我假设它是自动触发的(即使您确实具有创建功能的选项),这表明您应该能够使用Kusto的API /客户端库和简单的脚本/应用来实现您的目标。
  • 一种替代的方法,甚至可能是更好的方法,是重新考虑是否确实需要删除或更新特定记录,或者可以使用summarize arg_max()来仅查询以下内容的最新“版本”:记录(您还可以通过使用表名命名该函数来创建封装该逻辑并覆盖该表的函数)。