This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new e4ef362d82 [python] Update aggregation unsupported validation message
(#8694)
e4ef362d82 is described below
commit e4ef362d82f4f68ec6d0251c35af8d9b21100220
Author: AuroraVoyage <[email protected]>
AuthorDate: Thu Jul 30 10:39:50 2026 +0800
[python] Update aggregation unsupported validation message (#8694)
---
paimon-python/pypaimon/read/merge_engine_support.py | 8 +++-----
paimon-python/pypaimon/read/reader/aggregate/aggregators.py | 11 ++++++-----
.../pypaimon/read/reader/aggregation_merge_function.py | 7 +++----
paimon-python/pypaimon/tests/test_aggregation_e2e.py | 4 +---
4 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/paimon-python/pypaimon/read/merge_engine_support.py
b/paimon-python/pypaimon/read/merge_engine_support.py
index f1c477ed88..daf11b6a2f 100644
--- a/paimon-python/pypaimon/read/merge_engine_support.py
+++ b/paimon-python/pypaimon/read/merge_engine_support.py
@@ -215,9 +215,8 @@ def check_supported(table) -> None:
"built-in aggregators ({}); retract opt-ins "
"(aggregation.remove-record-on-delete, "
"fields.<f>.ignore-retract) "
- "and other aggregators (product / listagg / collect / "
- "nested_update* / theta_sketch / "
- "hll_sketch / roaring_bitmap_*) are not yet supported. "
+ "and other aggregators (hll_sketch / rbm64) "
+ "are not yet supported. "
"Open an issue to track support.".format(
", ".join(sorted(unsupported)),
", ".join(sorted(_AGGREGATION_SUPPORTED_AGG_FUNCS)),
@@ -267,8 +266,7 @@ def aggregation_unsupported_options(table) -> Set[str]:
``builtin_seq_comparator``).
3. Out-of-scope aggregator selections: ``fields.<f>.aggregate-
function`` and ``fields.default-aggregate-function`` set to an
- identifier this engine doesn't support yet (e.g. ``collect``,
- ``nested_update``).
+ identifier this engine doesn't support yet (e.g. ``hll_sketch``).
"""
flagged: Set[str] = set()
raw = table.options.options.to_map()
diff --git a/paimon-python/pypaimon/read/reader/aggregate/aggregators.py
b/paimon-python/pypaimon/read/reader/aggregate/aggregators.py
index 4d1a960db9..ca6d69cd09 100644
--- a/paimon-python/pypaimon/read/reader/aggregate/aggregators.py
+++ b/paimon-python/pypaimon/read/reader/aggregate/aggregators.py
@@ -22,13 +22,14 @@ Each class registers itself with the global registry at
import time
via :func:`register_aggregator`, so importing
``pypaimon.read.reader.aggregate`` makes all of them discoverable.
-This module ships 10 aggregators — the primary-key placeholder plus
-the 9 most commonly-used value aggregators: ``primary_key`` /
+This module ships 19 aggregators — the primary-key placeholder plus
+the 18 most commonly-used value aggregators: ``primary_key`` /
``last_value`` / ``last_non_null_value`` / ``first_value`` /
``first_non_null_value`` / ``sum`` / ``max`` / ``min`` / ``bool_or``
-/ ``bool_and``. Other aggregators (``product`` / ``listagg`` /
-``collect`` / ``merge_map`` / ``nested_update`` / ``theta_sketch`` /
-``hll_sketch`` / ``roaring_bitmap_*``) are intentionally deferred —
+/ ``bool_and`` / ``product`` / ``listagg`` / ``collect`` /
+``merge_map`` / ``merge_map_with_keytime`` / ``nested_update`` /
+``nested_partial_update`` / ``theta_sketch`` / ``rbm32``. Other
+aggregators (``hll_sketch`` / ``rbm64``) are intentionally deferred —
the registry will report them as unsupported so users see a clear
error rather than a silent fallback.
"""
diff --git a/paimon-python/pypaimon/read/reader/aggregation_merge_function.py
b/paimon-python/pypaimon/read/reader/aggregation_merge_function.py
index ae66673403..3d4b64f674 100644
--- a/paimon-python/pypaimon/read/reader/aggregation_merge_function.py
+++ b/paimon-python/pypaimon/read/reader/aggregation_merge_function.py
@@ -27,10 +27,9 @@ aggregation (sum / max / min / last_value / ...) per column.
This is the **core merge semantics only**. Retract on DELETE /
UPDATE_BEFORE rows (with ``aggregation.remove-record-on-delete`` and
-``fields.<field>.ignore-retract`` opt-ins) and ~14 additional
-aggregators (``product`` / ``listagg`` / ``collect`` / ``merge_map`` /
-``nested_update`` / ``theta_sketch`` / ``hll_sketch`` /
-``roaring_bitmap_*``) are intentionally deferred. Non-INSERT row
+``fields.<field>.ignore-retract`` opt-ins) and 2 additional
+aggregators (``hll_sketch`` / ``rbm64``)
+are intentionally deferred. Non-INSERT row
kinds raise ``NotImplementedError`` at :meth:`add` time so we never
silently corrupt data with a half-implemented contract, and
out-of-scope aggregator identifiers / options are rejected up-front in
diff --git a/paimon-python/pypaimon/tests/test_aggregation_e2e.py
b/paimon-python/pypaimon/tests/test_aggregation_e2e.py
index b70fe97d51..fc69104352 100644
--- a/paimon-python/pypaimon/tests/test_aggregation_e2e.py
+++ b/paimon-python/pypaimon/tests/test_aggregation_e2e.py
@@ -295,9 +295,7 @@ class AggregationMergeEngineE2ETest(unittest.TestCase):
def test_out_of_scope_field_aggregator_rejected(self):
# hll_sketch is one of the aggregator identifiers this engine
- # doesn't support yet. collect is now supported by the Python
- # aggregation engine, so use hll_sketch instead.
- # The guard must reject the config rather
+ # doesn't support yet. The guard must reject the config rather
# than let the per-field factory build a (silently wrong)
# fallback.
self._create_and_expect_unsupported(