Kusto中生成刷新后不改变的固定随机值方法咨询
实现Kusto中固定不变的随机值生成
直接用rand()不行,因为它每次执行查询都会生成新的随机数。要得到固定不变的随机值,可以利用hash函数+固定种子的方式,基于每行的唯一标识(比如Id、Name)计算出稳定的哈希值,再映射到你需要的数值范围(比如0-100)。
方法一:基于整数哈希取模(适合生成整数或近似实数)
这种方法简单直接,用固定种子对唯一标识做哈希,取绝对值后模100得到0-100之间的值:
let DataSource = datatable(Id:string, Name:string, Value:real) [ '1', 'Name1', 36.27, '2', 'Name2', 10.85, '3', 'Name3', 722.49, '4', 'Name4', 216.1, '5', 'Name5', 345.44, '6', 'Name6', 100.83 ]; DataSource | extend y = abs(hash(Id, 123)) % 100.0 // 123是自定义的固定种子,可换成任意整数
方法二:归一化到精确实数范围
如果需要更均匀的实数分布,可以把哈希值归一化到0-100的区间:
let DataSource = datatable(Id:string, Name:string, Value:real) [ '1', 'Name1', 36.27, '2', 'Name2', 10.85, '3', 'Name3', 722.49, '4', 'Name4', 216.1, '5', 'Name5', 345.44, '6', 'Name6', 100.83 ]; let fixed_seed = 456; // 固定种子,保持不变即可 let target_max = 100.0; // 目标最大值 DataSource | extend hash_result = hash(Name, fixed_seed) | extend y = (abs(hash_result) / toreal(pow(2, 31))) * target_max // 映射到0~target_max的实数 | project-away hash_result // 移除中间计算列
关键说明
- 固定种子:只要种子值不变,同一输入(比如Id='1')的哈希结果永远一致,生成的y值就不会变。
- 唯一标识:必须用每行唯一的字段(Id、Name都可以)作为哈希输入,确保每行的y值不同。
- 范围调整:把代码里的
100.0换成你需要的最大值,就能生成对应范围的固定随机值。
内容的提问来源于stack exchange,提问作者user1997
相关产品推荐
相关产品推荐

