如何解决ScyllaDB 窗口函数式查询
我使用的是 ScyllaDB 开源版本 4.4。
如果这是一个具有完整 SQL 的传统关系数据库,我正在尝试弄清楚如何编写一个查询,如果这是一个我会用窗口函数或 UNION 集合运算符完成的查询。
一个简化的表架构:
CREATE TABLE mykeyspace.mytable (
name text,timestamp_utc_nanoseconds bigint,value bigint,PRIMARY KEY( (name),timestamp_utc_nanoseconds )
) WITH CLUSTERING ORDER BY (timestamp_utc_nanoseconds DESC);
我的查询需要计算并返回 6 个值,每个值都是前一分钟“值”的平均值。
在伪代码中:
SELECT AVG(value) AS one_min_avg_6_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*6 minutes ago*] AND timestamp_utc_nanoseconds < [*5 minutes ago*];
SELECT AVG(value) AS one_min_avg_5_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*5 minutes ago*] AND timestamp_utc_nanoseconds < [*4 minutes ago*];
SELECT AVG(value) AS one_min_avg_4_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*4 minutes ago*] AND timestamp_utc_nanoseconds < [*3 minutes ago*];
SELECT AVG(value) AS one_min_avg_3_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*3 minutes ago*] AND timestamp_utc_nanoseconds < [*2 minutes ago*];
SELECT AVG(value) AS one_min_avg_2_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*2 minutes ago*] AND timestamp_utc_nanoseconds < [*1 minutes ago*];
SELECT AVG(value) AS one_min_avg_1_min_ago FROM mykeyspace.mytable WHERE name = 'some_name' AND timestamp_utc_nanoseconds >= [*1 minute ago*];
我的客户端是 C# .NET 5。我可以轻松地在客户端做几乎任何事情。但这种情况下的延迟将是一个大问题。
我的问题是: 如何在服务器端(而不是客户端应用端)将这 6 个查询组合成一个结果集?
解决方法
理想情况下,您将使用 UDA - 用户定义的聚合函数,但对这些函数的支持尚未完成。同时,您可以并行执行这 6 个查询,这可能更可取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。