ScyllaDB window 类函数查询

ScyllaDB window function-like query

我正在使用 ScyllaDB 开源版本 4.4。

我想知道如何编写一个查询,如果这是一个具有完整 SQL 的传统关系数据库,我会用 window 函数或 UNION 集合运算符来完成。

简化的 table 架构:

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);

我的查询需要计算 return 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 个查询,这甚至可能更可取。