Starting with MariaDB ColumnStore 1.1, the ability to create and use user defined aggregate and window functions is supported in addition to scalar functions. With Columnstore 1.2, multiple parameters are supported. A C++ SDK is provided as well as 3 reference examples that provide additional functions that may be of general use:
Similar to built in functions, the SDK supports distributed aggregate execution where as much of the calculation is scaled out across PM nodes and then collected / finalized in the UM node. Window functions (due to the ordering requirement) are only executed at the UM level.
The reference examples above are included in the standard build of MariaDB ColumnStore and so can be used by registering them as user defined aggregate functions. The same can be done for new functions assuming the instance has the updated libraries included. From a mcsmysql prompt:
CREATE AGGREGATE FUNCTION median returns REAL soname 'libudf_mysql.so'; CREATE AGGREGATE FUNCTION avg_mode returns REAL soname 'libudf_mysql.so'; CREATE AGGREGATE FUNCTION ssq returns REAL soname 'libudf_mysql.so';
After this these may be used in the same way as any other aggregate or window function like sum:
SELECT grade, AVG(loan_amnt) avg, MEDIAN(loan_amnt) median FROM loanstats GROUP BY grade ORDER BY grade;
This requires a MariaDB ColumnStore source tree and necessary tools to compile C/C++ code. The SDK and reference examples are available in the utils/udfsdk directory of the source tree. This contains the SDK documentation which is also available here:
© 2019 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/columnstore-user-defined-aggregate-and-window-functions/