sample 运算符

从输入表返回最大指定随机行数。

注意

  • sample 适用于速度而不是对值的均匀分配。 具体来说,这意味着如果在联合了 2 个不同大小的数据集的运算符(如 unionjoin 运算符)之后使用,它将不会产生“公平”的结果。 建议在表格引用和筛选器后立即使用 sample
  • sample 是一个非确定性运算符,每次在查询过程中对其求值时,它都会返回不同的结果集。 例如,以下查询将产生两个不同的行(即使其中一个预期会返回相同的行两次)。

语法

T| sampleNumberOfRows

详细了解语法约定

参数

客户 类型​​ 必需 说明
T string 输入表格表达式。
NumberOfRows int、long 或 real 要返回的行数。 可以指定任何数值表达式。

示例

let _data = range x from 1 to 100 step 1;
let _sample = _data | sample 1;
union (_sample), (_sample)

输出

x
83
3

为确保在上面的示例中 _sample 计算一次,可以使用 materialize() 函数:

let _data = range x from 1 to 100 step 1;
let _sample = materialize(_data | sample 1);
union (_sample), (_sample)

输出

x
34
34

若要对一定百分比的数据(而不是指定的行数)进行采样,则可以使用

StormEvents | where rand() < 0.1

若要对项而不是行进行采样(例如对 10 个 ID 进行采样并获取这些 ID 的所有行),则可以将 sample-distinctin 运算符结合使用。

let sampleEpisodes = StormEvents | sample-distinct 10 of EpisodeId;
StormEvents
| where EpisodeId in (sampleEpisodes)