我有一个非常大的PostgreSQL时间尺度数据库,它看起来大致如下:
| 源代码|目的地|交通|时间戳(类型:时间戳)|
| - ------|- ------|- ------|- ------|
| 项目a| B|二百|2022年12月11日00时23分51秒|
| 项目a| B|二百|2022年12月11日00时32分01秒|
| B|项目a|二百|2022年12月11日00时49分01秒|
| 项目a|(c)秘书长的报告|二百|2022年12月11日11时39分01秒|
| 项目a| B|二百|2022年12月11日11时57分01秒|
| 项目a| B|二十个|2022年12月11日21时32分01秒|
用户需要求src-dest
对之间的traffic
之和。例如,用户可能要求求a
和b
之间的traffic
之和。或者,求几对a
-〉b
和a
-〉c
之间的traffic
之和--这将使结果集更大。这是可以的:要聚集的对的数量是有限的、小的和受限的。2用户不会要求多于10对。
每个源-目的对都应该被认为是“唯一的”,这意味着a-b
与b-a
不同。
数据应分时段到两个时间戳中宽度相等的时段中。例如,从“2022-12-11 00:25:00.000”到“2022-12-11 19:35:00.000”的24个50 minute
时段。
桶的数量由我决定,我取开始时间戳和结束时间戳,并将它们除以X个等宽的桶(在这个问题中,你可以假设它总是24)。
这就是我遇到问题的地方--几个必须达到的结果:
1.范围内的所有时段都必须出现在结果中。因此,对于上面的示例,a
-〉b
对的结果应该始终有24行,每行代表1个时段。(这就是Timescale的time_bucket
功能失败的地方)
1.在我们的示例中,最早的时段行应该始终是起始时间戳:2022-12-11 00:25:00.000
(这是time_bucket_gapfill
功能失败的地方)。
查询的必备条件:
1.查询应支持多个对。例如:
WHERE ((src = 'a' and dest = 'b') or (src = 'a' and dest = 'c'))
输出示例(与输入示例无关)。
对于a
和b
对,从00:25:00
开始的24个时间桶,其中通信在11:15
和11:55
之间的某个时间停止:
| 时段|源代码|目的地|交通|
| - ------|- ------|- ------|- ------|
| 2022年12月11日00时25分00秒000秒+0200秒|项目a| B|小行星48614|
| 2022年12月11日01时15分00秒00分+0200秒|项目a| B|小行星49|
| 2022年12月11日02时05分00秒000秒+0200秒|项目a| B|小行星49|
| 2022年12月11日02时55分00千+0200秒|项目a| B|小行星48614|
| 2022年12月11日03时45分00千+0200秒|项目a| B|小行星49|
| 2022年12月11日04时35分00千+0200秒|项目a| B|小行星49119|
| 2022年12月11日05时25分00秒00分+0200秒|项目a| B|小行星27288|
| 2022年12月11日06时15分00秒00分+0200秒|项目a| B|小行星26054|
| 2022年12月11日07时05分00秒00秒+0200秒|项目a| B|小行星25735|
| 2022年12月11日07时55分00千+0200秒|项目a| B|小行星2536|
| 2022年12月11日08时45分00千+0200秒|项目a| B|小行星26748|
| 2022年12月11日09时35分00秒00分+0200秒|项目a| B|小行星24787|
| 2022年12月11日10时25分00秒00秒+0200秒|项目a| B|小行星23065|
| 2022年12月11日11时15分00秒000秒+0200秒|项目a| B|小行星20629|
| 2022年12月11日11时55分00秒000秒+0200秒|项目a| B|零|
| 2022年12月11日12时45分00万+0200秒|项目a| B|零|
| - -|项目a| B|零|
| 2022年12月12日19时35分00秒|项目a| B|零|
1条答案
按热度按时间iyr7buue1#
鉴于以下情况:
一种使用标准PostgreSQL而不扩展timescaledb的方法
cte_ts_params
表示(start_ts
,end_ts
)参数src
,dest
)参数的cte_src_desc_params
cte_time_buckets
,用于基于cte_ts_params
的24个50分钟时段cte_src_dest_time_buckets
适用于所有组合(src
、dest
)xtime bucket
输出示例:
更新根据@zerohedge评论中的后续问题
根据https://docs.timescale.com/api/latest/hyperfunctions/time_bucket/,
对于不包括月或年间隔的时段,时段起始默认为2000年1月3日午夜;对于月、年和世纪时段,时段起始默认为2000年1月1日午夜。
我测试了timescales-latest-pg 14 docker图像,它具有
使用以下查询调用
time_bucket()
和time_bucket_gapfill()
,并使用必需参数和可选参数:型
结果:
你可以看到
time_bucket()
在给定自定义原点时有效time_bucket_gapfill()
不工作,即使给定自定义开始和结束它是一个bug、一个特性还是遗漏了什么?