【发布时间】:2021-03-30 02:27:47
【问题描述】:
我正在编写一个自定义 Presto 聚合函数,当(且仅当)值按我正在聚合的值按升序排序时,它会产生正确的结果。即
以下将起作用:
SELECT key, MY_AGG_FUNC(value ORDER BY value ASC) FROM my_table GROUP BY key
以下将产生不正确的结果:
SELECT key, MY_AGG_FUNC(value) FROM my_table GROUP BY key
在开发MY_AGG_FUNC 时,有没有办法在内部强制执行ORDER BY value ASC 而无需依赖调用者将其添加到查询中?
作为替代方案,如果用户根本没有指定 ORDER BY(或不正确的顺序),有没有办法抛出异常?
【问题讨论】:
-
这看起来与其他内置聚合函数的行为以及一般 SQL 的行为一致:如果调用者想要排序,他应该明确说明。
-
谢谢!你能指出一个在运行时强制执行的内置聚合函数吗?
-
我的意思是 not 实现默认排序策略与内置函数的作用一致。其中一些接受
ORDER BY子句(arry_agg(),string_agg(),...) - 如果调用者未指定它,则未定义结果的顺序。 -
我对@987654328@ 的实现有点困惑。组/分区会进一步拆分吗?如果是这样,一个分区可能处于“中间”,并且不会从最小值开始处理该分区。我正在尝试在这里实现“折叠”操作。
标签: aggregation partitioning presto nosql-aggregation trino