You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafusion.apache.org by gi...@apache.org on 2026/09/27 04:11:38 UTC

(datafusion-comet) branch asf-site updated: Publish built docs triggered by 74fdec5bcdb95f209104a2b698712f668aea4ae2

This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 8ea52635e2 Publish built docs triggered by 74fdec5bcdb95f209104a2b698712f668aea4ae2
8ea52635e2 is described below

commit 8ea52635e272f0077c35fae322e77ff1112626fb
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Sun Sep 27 04:11:33 2026 +0000

    Publish built docs triggered by 74fdec5bcdb95f209104a2b698712f668aea4ae2
---
 ...id-013012468fa27c9e9fdb0a14196d357c619c68a8.svg |  2 +-
 .../contributor-guide/adding_a_new_operator.md.txt | 15 +++++++++++++++
 _sources/user-guide/latest/configs.md.txt          |  1 +
 _sources/user-guide/latest/tuning/operators.md.txt | 18 ++++++++++++++++++
 contributor-guide/adding_a_new_operator.html       | 15 +++++++++++++++
 searchindex.js                                     |  2 +-
 user-guide/latest/configs.html                     | 22 +++++++++++++---------
 user-guide/latest/tuning/operators.html            | 17 +++++++++++++++++
 8 files changed, 81 insertions(+), 11 deletions(-)

diff --git a/_images/mermaid-013012468fa27c9e9fdb0a14196d357c619c68a8.svg b/_images/mermaid-013012468fa27c9e9fdb0a14196d357c619c68a8.svg
index d896c7d650..e8896d1bab 100644
--- a/_images/mermaid-013012468fa27c9e9fdb0a14196d357c619c68a8.svg
+++ b/_images/mermaid-013012468fa27c9e9fdb0a14196d357c619c68a8.svg
@@ -1 +1 @@
-<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 511.73px; background-color: transparent;" viewBox="0 0 511.7299499511719 942" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg [...]
\ No newline at end of file
+<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 511.73px; background-color: transparent;" viewBox="0 0 511.7299499511719 942" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg [...]
\ No newline at end of file
diff --git a/_sources/contributor-guide/adding_a_new_operator.md.txt b/_sources/contributor-guide/adding_a_new_operator.md.txt
index 6c3c634e98..c0a20f40aa 100644
--- a/_sources/contributor-guide/adding_a_new_operator.md.txt
+++ b/_sources/contributor-guide/adding_a_new_operator.md.txt
@@ -70,6 +70,21 @@ in `CometExecRule` rather than using `CometOperatorSerde`, because they don't ne
 
 Examples: `CometBroadcastExchangeExec`, `CometShuffleExchangeExec`
 
+#### Local TopK inside a sink
+
+`CometTakeOrderedAndProjectExec` owns local candidate selection, the optional shuffle, and final
+selection with offset and projection. When `spark.comet.exec.topK.fusion.enabled` is enabled for an
+eligible native Parquet scan, its conversion inserts `CometLocalTopKExec` before native blocks are
+serialized. The local node extends `CometUnaryExec` and serializes a bounded sort above the native
+scan, so they execute in one block. It preserves the scan's output and partitioning and advertises
+the local sort order.
+
+The inserted node keeps the original Spark TopK for plan bookkeeping, but only the outer TopK owns
+Spark's offset and projection. Both transition reversion and aggregate-buffer restoration therefore
+remove the inserted local node when restoring Spark execution. Restoring its `originalPlan` would
+apply the global TopK twice. A single input partition uses a final native limit and projection;
+multiple input partitions still require a final TopK after the shuffle.
+
 ### Choosing the Right Operator Type
 
 When adding a new operator, choose based on these criteria:
diff --git a/_sources/user-guide/latest/configs.md.txt b/_sources/user-guide/latest/configs.md.txt
index 035b074593..77ddd4fd62 100644
--- a/_sources/user-guide/latest/configs.md.txt
+++ b/_sources/user-guide/latest/configs.md.txt
@@ -68,6 +68,7 @@ Comet provides the following configuration settings.
 | `spark.comet.exec.pyarrowUDF.enabled` | Experimental: whether to enable optimized execution of PyArrow UDFs (mapInArrow/mapInPandas). When enabled, Comet passes Arrow columnar data directly to Python UDFs without the intermediate Arrow-to-Row-to-Arrow conversion that Spark normally performs. Disabled by default while the feature stabilizes. | false |
 | `spark.comet.exec.scalaUDF.codegen.enabled` | Whether to route Spark `ScalaUDF` expressions through Comet's Arrow-direct codegen dispatcher. When enabled, a supported ScalaUDF is compiled into a per-batch kernel that reads and writes Arrow vectors directly from native execution. When disabled, plans containing a ScalaUDF fall back to Spark for the enclosing operator. The same dispatcher backs the regex family (`rlike`, `regexp_replace`, `split`, `regexp_extract`, `regexp_extract_all`,  [...]
 | `spark.comet.exec.strictFloatingPoint` | When enabled, fall back to Spark for floating-point operations that may differ from Spark, such as comparing -0.0 and 0.0, sorting floating-point values nested in arrays, structs, or maps, or sorting the elements of a floating-point array with `sort_array`. Scalar `ORDER BY`, window ordering and range partitioning keys are unaffected, because Comet normalizes those comparison keys to match Spark. For more information, refer to the [Comet Compati [...]
+| `spark.comet.exec.topK.fusion.enabled` | Experimental opt-in: run an eligible local TopK in the same native execution as its Parquet scan. Supports one direct signed integer sort key. This changes the local execution pipeline and can reduce scan/TopK overlap, so it may be slower for some workloads. | false |
 | `spark.comet.exec.transitionRevert.enabled` | When enabled, Comet reverts a query stage to Spark row-based execution if the number of columnar-to-row (C2R) transitions in the stage exceeds the configured threshold. This avoids the overhead of repeated format conversions in stages where many operators fall back to row-based execution. | false |
 | `spark.comet.exec.transitionRevert.maxTransitions` | The maximum number of columnar-to-row (C2R) transitions allowed in a single query stage before Comet reverts the entire stage to Spark row-based execution. When columnar shuffle is enabled, each such C2R typically implies a corresponding row-to-columnar conversion to feed back into the columnar shuffle, so each counted C2R is a useful proxy for the conversion overhead in the stage. Set to 0 to revert any stage with transitions. Only  [...]
 | `spark.comet.metrics.enabled` | Whether to enable Comet metrics reporting through Spark's external monitoring system. When enabled, Comet exposes metrics such as native operators, Spark operators, queries planned, transitions, and acceleration ratio. These metrics can be visualized through tools like Grafana when a metrics sink (e.g., Prometheus) is configured. Disabled by default because Spark plan traversal adds overhead and metrics require a sink to be useful. This config must be se [...]
diff --git a/_sources/user-guide/latest/tuning/operators.md.txt b/_sources/user-guide/latest/tuning/operators.md.txt
index 843fd3b708..9dffa080ee 100644
--- a/_sources/user-guide/latest/tuning/operators.md.txt
+++ b/_sources/user-guide/latest/tuning/operators.md.txt
@@ -99,6 +99,24 @@ SET spark.comet.datafusion.execution.skip_partial_aggregation_probe_ratio_thresh
 These settings only tune eligible plans. Unsupported accumulators and modes remain
 disabled even when configuration overrides are enabled.
 
+## Local TopK Fusion
+
+Set `spark.comet.exec.topK.fusion.enabled=true` to run an eligible local TopK in the same native
+execution as its Parquet scan. This experimental optimization is disabled by default. It currently
+supports a direct native Parquet scan ordered by one signed integer column (`TINYINT`, `SMALLINT`,
+`INT`, or `BIGINT`). Both sort directions and null orderings are supported. Other inputs use the
+existing TopK execution path.
+
+Each scan partition keeps enough candidates for both `LIMIT` and `OFFSET`. With multiple partitions,
+Comet shuffles those candidates and performs the final TopK. With one partition, it reuses the local
+ordering without building a second heap. The final stage applies the offset and output projection.
+
+Fusion reduces the work of passing scan batches between native execution blocks. It still reads all
+input rows and does not enable TopK reader pruning. It can also reduce overlap between scan decoding
+and TopK processing, so some workloads may run slower. Compare enabled and disabled runs with your
+data layout, payload width, limit, and partition count before enabling it. The
+`CometTopKBenchmark` microbenchmark covers these cases with ascending, descending, and random layouts.
+
 ## Optimizing Sorting on Floating-Point Values
 
 Comet normalizes NaN payloads and signed zeros in scalar `FLOAT` and `DOUBLE` ordering keys, so `ORDER BY`, window
diff --git a/contributor-guide/adding_a_new_operator.html b/contributor-guide/adding_a_new_operator.html
index e0d9979794..d53db81dee 100644
--- a/contributor-guide/adding_a_new_operator.html
+++ b/contributor-guide/adding_a_new_operator.html
@@ -594,6 +594,20 @@ map in <code class="docutils literal notranslate"><span class="pre">CometExecRul
 in <code class="docutils literal notranslate"><span class="pre">CometExecRule</span></code> rather than using <code class="docutils literal notranslate"><span class="pre">CometOperatorSerde</span></code>, because they don’t need protobuf serialization.</p>
 <p>Examples: <code class="docutils literal notranslate"><span class="pre">CometBroadcastExchangeExec</span></code>, <code class="docutils literal notranslate"><span class="pre">CometShuffleExchangeExec</span></code></p>
 </section>
+<section id="local-topk-inside-a-sink">
+<h4>Local TopK inside a sink<a class="headerlink" href="#local-topk-inside-a-sink" title="Link to this heading">#</a></h4>
+<p><code class="docutils literal notranslate"><span class="pre">CometTakeOrderedAndProjectExec</span></code> owns local candidate selection, the optional shuffle, and final
+selection with offset and projection. When <code class="docutils literal notranslate"><span class="pre">spark.comet.exec.topK.fusion.enabled</span></code> is enabled for an
+eligible native Parquet scan, its conversion inserts <code class="docutils literal notranslate"><span class="pre">CometLocalTopKExec</span></code> before native blocks are
+serialized. The local node extends <code class="docutils literal notranslate"><span class="pre">CometUnaryExec</span></code> and serializes a bounded sort above the native
+scan, so they execute in one block. It preserves the scan’s output and partitioning and advertises
+the local sort order.</p>
+<p>The inserted node keeps the original Spark TopK for plan bookkeeping, but only the outer TopK owns
+Spark’s offset and projection. Both transition reversion and aggregate-buffer restoration therefore
+remove the inserted local node when restoring Spark execution. Restoring its <code class="docutils literal notranslate"><span class="pre">originalPlan</span></code> would
+apply the global TopK twice. A single input partition uses a final native limit and projection;
+multiple input partitions still require a final TopK after the shuffle.</p>
+</section>
 </section>
 <section id="choosing-the-right-operator-type">
 <h3>Choosing the Right Operator Type<a class="headerlink" href="#choosing-the-right-operator-type" title="Link to this heading">#</a></h3>
@@ -1165,6 +1179,7 @@ manages the boundary between JVM and native execution.</p>
 <li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#native-operators-nativeexecs-map">1. Native Operators (<code class="docutils literal notranslate"><span class="pre">nativeExecs</span></code> map)</a></li>
 <li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#sink-operators-sinks-map">2. Sink Operators (<code class="docutils literal notranslate"><span class="pre">sinks</span></code> map)</a></li>
 <li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#comet-jvm-operators">3. Comet JVM Operators</a></li>
+<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#local-topk-inside-a-sink">Local TopK inside a sink</a></li>
 </ul>
 </li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#choosing-the-right-operator-type">Choosing the Right Operator Type</a></li>
diff --git a/searchindex.js b/searchindex.js
index 07c06fde3f..0832dd577d 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"!": [[56, "id1"]], "%": [[54, "id1"]], "&": [[44, "id1"]], "*": [[54, "id2"]], "+": [[54, "id3"]], "-": [[54, "id4"]], "/": [[54, "id5"]], "1. Format Your Code": [[41, "format-your-code"]], "1. Install Comet": [[62, "install-comet"], [74, "install-comet"]], "1. Native Operators (nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and Verify": [[41, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[62, "clone-iceberg-and-apply- [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"!": [[56, "id1"]], "%": [[54, "id1"]], "&": [[44, "id1"]], "*": [[54, "id2"]], "+": [[54, "id3"]], "-": [[54, "id4"]], "/": [[54, "id5"]], "1. Format Your Code": [[41, "format-your-code"]], "1. Install Comet": [[62, "install-comet"], [74, "install-comet"]], "1. Native Operators (nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and Verify": [[41, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[62, "clone-iceberg-and-apply- [...]
\ No newline at end of file
diff --git a/user-guide/latest/configs.html b/user-guide/latest/configs.html
index 1eeb0cb0fb..13cb9e1453 100644
--- a/user-guide/latest/configs.html
+++ b/user-guide/latest/configs.html
@@ -927,39 +927,43 @@ under the License.
 <td><p>When enabled, fall back to Spark for floating-point operations that may differ from Spark, such as comparing -0.0 and 0.0, sorting floating-point values nested in arrays, structs, or maps, or sorting the elements of a floating-point array with <code class="docutils literal notranslate"><span class="pre">sort_array</span></code>. Scalar <code class="docutils literal notranslate"><span class="pre">ORDER</span> <span class="pre">BY</span></code>, window ordering and range partitionin [...]
 <td><p>false</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.exec.transitionRevert.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.exec.topK.fusion.enabled</span></code></p></td>
+<td><p>Experimental opt-in: run an eligible local TopK in the same native execution as its Parquet scan. Supports one direct signed integer sort key. This changes the local execution pipeline and can reduce scan/TopK overlap, so it may be slower for some workloads.</p></td>
+<td><p>false</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.exec.transitionRevert.enabled</span></code></p></td>
 <td><p>When enabled, Comet reverts a query stage to Spark row-based execution if the number of columnar-to-row (C2R) transitions in the stage exceeds the configured threshold. This avoids the overhead of repeated format conversions in stages where many operators fall back to row-based execution.</p></td>
 <td><p>false</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.exec.transitionRevert.maxTransitions</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.exec.transitionRevert.maxTransitions</span></code></p></td>
 <td><p>The maximum number of columnar-to-row (C2R) transitions allowed in a single query stage before Comet reverts the entire stage to Spark row-based execution. When columnar shuffle is enabled, each such C2R typically implies a corresponding row-to-columnar conversion to feed back into the columnar shuffle, so each counted C2R is a useful proxy for the conversion overhead in the stage. Set to 0 to revert any stage with transitions. Only effective when spark.comet.exec.transitionRevert [...]
 <td><p>2</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.metrics.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.metrics.enabled</span></code></p></td>
 <td><p>Whether to enable Comet metrics reporting through Spark’s external monitoring system. When enabled, Comet exposes metrics such as native operators, Spark operators, queries planned, transitions, and acceleration ratio. These metrics can be visualized through tools like Grafana when a metrics sink (e.g., Prometheus) is configured. Disabled by default because Spark plan traversal adds overhead and metrics require a sink to be useful. This config must be set before the SparkSession i [...]
 <td><p>false</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.metrics.updateInterval</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.metrics.updateInterval</span></code></p></td>
 <td><p>The interval in milliseconds to update metrics. If interval is negative, metrics will be updated upon task completion.</p></td>
 <td><p>3000</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.nativeLoadRequired</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.nativeLoadRequired</span></code></p></td>
 <td><p>Whether to require Comet native library to load successfully when Comet is enabled. If not, Comet will silently fallback to Spark when it fails to load the native lib. Otherwise, an error will be thrown and the Spark job will be aborted.</p></td>
 <td><p>false</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.operator.DataWritingCommandExec.allowIncompatible</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.operator.DataWritingCommandExec.allowIncompatible</span></code></p></td>
 <td><p>Whether to allow incompatibility for operator: DataWritingCommandExec. False by default. Can be overridden with SPARK_COMET_OPERATOR_DATAWRITINGCOMMANDEXEC_ALLOWINCOMPATIBLE env variable It can be overridden by the environment variable <code class="docutils literal notranslate"><span class="pre">SPARK_COMET_OPERATOR_DATAWRITINGCOMMANDEXEC_ALLOWINCOMPATIBLE</span></code>.</p></td>
 <td><p>false</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.operator.WriteFilesExec.allowIncompatible</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.operator.WriteFilesExec.allowIncompatible</span></code></p></td>
 <td><p>Whether to allow incompatibility for operator: WriteFilesExec. False by default. Can be overridden with SPARK_COMET_OPERATOR_WRITEFILESEXEC_ALLOWINCOMPATIBLE env variable It can be overridden by the environment variable <code class="docutils literal notranslate"><span class="pre">SPARK_COMET_OPERATOR_WRITEFILESEXEC_ALLOWINCOMPATIBLE</span></code>.</p></td>
 <td><p>false</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.enabled</span></code></p></td>
 <td><p>Whether to enable Spark to Arrow columnar conversion. When this is turned on, Comet will convert operators in <code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.supportedOperatorList</span></code> into Arrow columnar format before processing.</p></td>
 <td><p>false</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.supportedOperatorList</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.supportedOperatorList</span></code></p></td>
 <td><p>A comma-separated list of operators that will be converted to Arrow columnar format when <code class="docutils literal notranslate"><span class="pre">spark.comet.sparkToColumnar.enabled</span></code> is true.</p></td>
 <td><p>Range,InMemoryTableScan,RDDScan,OneRowRelation</p></td>
 </tr>
diff --git a/user-guide/latest/tuning/operators.html b/user-guide/latest/tuning/operators.html
index aa53e64bd4..8802147b2a 100644
--- a/user-guide/latest/tuning/operators.html
+++ b/user-guide/latest/tuning/operators.html
@@ -854,6 +854,22 @@ the ratio threshold above the maximum possible groups/input-rows ratio:</p>
 <p>These settings only tune eligible plans. Unsupported accumulators and modes remain
 disabled even when configuration overrides are enabled.</p>
 </section>
+<section id="local-topk-fusion">
+<h2>Local TopK Fusion<a class="headerlink" href="#local-topk-fusion" title="Link to this heading">#</a></h2>
+<p>Set <code class="docutils literal notranslate"><span class="pre">spark.comet.exec.topK.fusion.enabled=true</span></code> to run an eligible local TopK in the same native
+execution as its Parquet scan. This experimental optimization is disabled by default. It currently
+supports a direct native Parquet scan ordered by one signed integer column (<code class="docutils literal notranslate"><span class="pre">TINYINT</span></code>, <code class="docutils literal notranslate"><span class="pre">SMALLINT</span></code>,
+<code class="docutils literal notranslate"><span class="pre">INT</span></code>, or <code class="docutils literal notranslate"><span class="pre">BIGINT</span></code>). Both sort directions and null orderings are supported. Other inputs use the
+existing TopK execution path.</p>
+<p>Each scan partition keeps enough candidates for both <code class="docutils literal notranslate"><span class="pre">LIMIT</span></code> and <code class="docutils literal notranslate"><span class="pre">OFFSET</span></code>. With multiple partitions,
+Comet shuffles those candidates and performs the final TopK. With one partition, it reuses the local
+ordering without building a second heap. The final stage applies the offset and output projection.</p>
+<p>Fusion reduces the work of passing scan batches between native execution blocks. It still reads all
+input rows and does not enable TopK reader pruning. It can also reduce overlap between scan decoding
+and TopK processing, so some workloads may run slower. Compare enabled and disabled runs with your
+data layout, payload width, limit, and partition count before enabling it. The
+<code class="docutils literal notranslate"><span class="pre">CometTopKBenchmark</span></code> microbenchmark covers these cases with ascending, descending, and random layouts.</p>
+</section>
 <section id="optimizing-sorting-on-floating-point-values">
 <h2>Optimizing Sorting on Floating-Point Values<a class="headerlink" href="#optimizing-sorting-on-floating-point-values" title="Link to this heading">#</a></h2>
 <p>Comet normalizes NaN payloads and signed zeros in scalar <code class="docutils literal notranslate"><span class="pre">FLOAT</span></code> and <code class="docutils literal notranslate"><span class="pre">DOUBLE</span></code> ordering keys, so <code class="docutils literal notranslate"><span class="pre">ORDER</span> <span class="pre">BY</span></code>, window
@@ -923,6 +939,7 @@ element type. Use <code class="docutils literal notranslate"><span class="pre">s
 </ul>
 </li>
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#adaptive-partial-aggregation">Adaptive Partial Aggregation</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#local-topk-fusion">Local TopK Fusion</a></li>
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#optimizing-sorting-on-floating-point-values">Optimizing Sorting on Floating-Point Values</a></li>
 </ul>
   </nav></div>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datafusion.apache.org
For additional commands, e-mail: commits-help@datafusion.apache.org