2020 "Parameters are passed in the same type as written in the formula."
2121)
2222
23+ _COMMON_AGG_EXECUTION_NOTE = _ (
24+ "The function is executed as an aggregation across grouped rows. "
25+ "Parameters are passed in the same type as written in the formula."
26+ )
27+
2328_COMMON_NAME_CONSTRAINT = _ (
2429 "The function name must contain only alphanumeric characters, underscore and colon characters."
2530)
@@ -45,6 +50,18 @@ def _db_call_description(return_type: str) -> str:
4550 )
4651
4752
53+ def _db_call_agg_description (return_type : str ) -> str :
54+ """Generate description for DB_CALL_AGG_* functions."""
55+ return _ (
56+ f"Calls a native database aggregate function by name. Native function should return { return_type } . "
57+ f"{ _COMMON_AGG_EXECUTION_NOTE } "
58+ "\n \n "
59+ f"{ _COMMON_ARG_DESCRIPTION } \n "
60+ "\n "
61+ f"{ _COMMON_NAME_CONSTRAINT } "
62+ )
63+
64+
4865FUNCTION_DB_CALL_INT = FunctionDocRegistryItem (
4966 name = "db_call_int" ,
5067 category = CATEGORY_NATIVE ,
@@ -160,6 +177,48 @@ def _db_call_description(return_type: str) -> str:
160177 ],
161178)
162179
180+ FUNCTION_DB_CALL_AGG_INT = FunctionDocRegistryItem (
181+ name = "db_call_agg_int" ,
182+ category = CATEGORY_NATIVE ,
183+ description = _db_call_agg_description ("an integer result" ),
184+ notes = [_COMMON_NOTE ],
185+ examples = [
186+ SimpleExample (
187+ 'DB_CALL_AGG_INT("uniqMerge", [uniqStateField]) '
188+ "-- ClickHouse: merge uniqState aggregations to get unique count"
189+ ),
190+ ],
191+ )
192+
193+ FUNCTION_DB_CALL_AGG_FLOAT = FunctionDocRegistryItem (
194+ name = "db_call_agg_float" ,
195+ category = CATEGORY_NATIVE ,
196+ description = _db_call_agg_description ("a float result" ),
197+ notes = [_COMMON_NOTE ],
198+ examples = [
199+ SimpleExample (
200+ 'DB_CALL_AGG_FLOAT("avgWeighted", [amount], [weight_field]) '
201+ "-- ClickHouse: calculate weighted average of amount by weight"
202+ ),
203+ SimpleExample (
204+ 'DB_CALL_AGG_FLOAT("corr", [x], [y]) -- ClickHouse: calculate correlation coefficient between x and y'
205+ ),
206+ ],
207+ )
208+
209+ FUNCTION_DB_CALL_AGG_STRING = FunctionDocRegistryItem (
210+ name = "db_call_agg_string" ,
211+ category = CATEGORY_NATIVE ,
212+ description = _db_call_agg_description ("a string result" ),
213+ notes = [_COMMON_NOTE ],
214+ examples = [
215+ SimpleExample (
216+ 'DB_CALL_AGG_STRING("anyHeavy", [str_field]) '
217+ "-- ClickHouse: select a frequently occurring value (more intelligent than random any)"
218+ ),
219+ ],
220+ )
221+
163222FUNCTIONS_NATIVE = [
164223 FUNCTION_DB_CALL_INT ,
165224 FUNCTION_DB_CALL_FLOAT ,
@@ -168,4 +227,7 @@ def _db_call_description(return_type: str) -> str:
168227 FUNCTION_DB_CALL_ARRAY_INT ,
169228 FUNCTION_DB_CALL_ARRAY_FLOAT ,
170229 FUNCTION_DB_CALL_ARRAY_STRING ,
230+ FUNCTION_DB_CALL_AGG_INT ,
231+ FUNCTION_DB_CALL_AGG_FLOAT ,
232+ FUNCTION_DB_CALL_AGG_STRING ,
171233]
0 commit comments