table()

table() 函数通过以 string 类型表达式的形式提供表的名称来引用表。

语法

table(TableName [,DataScope] )

详细了解语法约定

参数

客户 类型​​ 必需 说明
TableName string 引用的表的名称。 在调用该函数时,此表达式的值必须是常数,也就是说,它不能随数据上下文变化。
DataScope string 用于根据数据如何按照表的有效缓存策略归类来限制表对此数据的引用。 如果使用,实际参数必须是有效的数据范围值之一。

有效的数据范围值

说明
hotcache 只有划分为热缓存类型的数据才会被引用。
all 该表中的所有数据都会被引用。
default 默认值为 all,除非群集管理员已将它设置为 hotcache

返回

table(T) 返回:

  • 如果存在名为 T 的表,则为来自表 T 的数据。
  • 如果名为 T 的表不存在,但存在名为 T 的函数,则为由函数 T 返回的数据。 函数 T 不得接受任何参数,并且必须返回表格结果。
  • 如果没有名为 T 的表和名为 T 的函数,则会引发语义错误。

示例

使用 table() 访问当前数据库的表

table('StormEvents') | count

输出

计数
59066

在 let 语句中使用 table()

可以将上面的查询重新编写为查询定义的函数(let 语句,以接收参数 tableName - 该参数会传递到 table() 函数中。

let foo = (tableName:string)
{
    table(tableName) | count
};
foo('StormEvents')

输出

计数
59066

在函数中使用 table()

可以重写与上述示例相同的查询,以便在一个接收参数 tableName 的函数中使用,该参数会传递到 table() 函数中。

.create function foo(tableName:string)
{
    table(tableName) | count
};

注意

此类函数只能在本地使用,而不能在跨群集查询中使用。

将 table() 与非常数参数配合使用

不是标量常数字符串的参数不能作为参数传递到 table() 函数。

下面提供这种情况下的解决方法示例。

let T1 = print x=1;
let T2 = print x=2;
let _choose = (_selector:string)
{
    union
    (T1 | where _selector == 'T1'),
    (T2 | where _selector == 'T2')
};
_choose('T2')

输出

x
2