gpt4 book ai didi

azure - 时间戳上的 KQL bin 产生的结果与 unix 时间戳上的不同

转载 作者:行者123 更新时间:2023-12-03 02:13:05 24 4
gpt4 key购买 nike

考虑下表:

let fooTable = datatable(ts: long) [
1655139949044,
1655053767530,
];

它有两个以毫秒为单位的unix时间戳值,日期是:

2022-06-12T17:09:27.53Z
2022-06-13T17:05:49.044Z

我想按按周四舍五入的日期进行 COUNT() 分组。

一个查询在时间戳字段上使用 bin

let fooTable = datatable(ts: long) [
1655139949044,
1655053767530,
];
let bucket_ts = 1m * 10080;
fooTable | summarize count() by bin(unixtime_milliseconds_todatetime(ts), bucket_ts)

第二个查询对 Long 值使用 bin

let fooTable = datatable(ts: long) [
1655139949044,
1655053767530,
];
let bucket_long = 60000 * 10080;
fooTable | summarize count() by bin(ts, bucket_long) | extend ts=unixtime_milliseconds_todatetime(ts)

我试图理解为什么它们会产生不同的结果 - 我期望结果是相同的(例如,前者产生 2 行,后者产生 1 行(正如我预期的那样))。

看起来好像当bin在日期类型上时 - 它按恒定时间桶对其进行分组,但在长类型上它只是将其归底到前一周(基于相对时间)。

我想对日期时间类型进行bin,使其表现得像 Long 示例一样。我怎样才能仍然使用日期时间类型来做到这一点?

我想简单的答案是将日期时间转换为 Long,但这个解决方案对我来说似乎很困惑。

最佳答案

Unix 时间从 1970-01-01 开始

print unixtime_milliseconds_todatetime(0);
<表类=“s-表”><标题>print_0 <正文>1970-01-01T00:00:00Z

日期时间以 0001-01-01 开头

print todatetime(0);
<表类=“s-表”><标题>print_0 <正文>0001-01-01T00:00:00Z

不同的引用点,不同的结果。

使用bin_at()使用 1970-01-01 将日期时间 bin 与长 bin 匹配

let fooTable = datatable(ts: long) [
1655139949044,
1655053767530,
];
let bucket_ts = 1m * 10080;
fooTable | summarize count() by bin_at(unixtime_milliseconds_todatetime(ts), bucket_ts, datetime(1970-01-01T00:00:00Z))
<表类=“s-表”><标题>第 1 列计数_ <正文>2022-06-09T00:00:00Z2

Fiddle

关于azure - 时间戳上的 KQL bin 产生的结果与 unix 时间戳上的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72613939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com