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 a5ac3bb61d Publish built docs triggered by 
027c9b05dc19ad3fd6bbe1d58df2f322b5bdb6c6
a5ac3bb61d is described below

commit a5ac3bb61dc267579ddb02460323efa9fe03d8b0
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jun 5 02:35:56 2026 +0000

    Publish built docs triggered by 027c9b05dc19ad3fd6bbe1d58df2f322b5bdb6c6
---
 _sources/user-guide/latest/configs.md.txt          |   1 +
 .../latest/understanding-comet-plans.md.txt        |  45 +++++
 searchindex.js                                     |   2 +-
 user-guide/latest/configs.html                     | 214 +++++++++++----------
 user-guide/latest/understanding-comet-plans.html   |  40 ++++
 5 files changed, 196 insertions(+), 106 deletions(-)

diff --git a/_sources/user-guide/latest/configs.md.txt 
b/_sources/user-guide/latest/configs.md.txt
index 34264d463f..b53ac79088 100644
--- a/_sources/user-guide/latest/configs.md.txt
+++ b/_sources/user-guide/latest/configs.md.txt
@@ -291,6 +291,7 @@ These settings can be used to determine which parts of the 
plan are accelerated
 | `spark.comet.expression.Least.enabled` | Enable Comet acceleration for 
`Least` | true |
 | `spark.comet.expression.Left.enabled` | Enable Comet acceleration for `Left` 
| true |
 | `spark.comet.expression.Length.enabled` | Enable Comet acceleration for 
`Length` | true |
+| `spark.comet.expression.LengthOfJsonArray.enabled` | Enable Comet 
acceleration for `LengthOfJsonArray` | true |
 | `spark.comet.expression.LessThan.enabled` | Enable Comet acceleration for 
`LessThan` | true |
 | `spark.comet.expression.LessThanOrEqual.enabled` | Enable Comet acceleration 
for `LessThanOrEqual` | true |
 | `spark.comet.expression.Like.enabled` | Enable Comet acceleration for `Like` 
| true |
diff --git a/_sources/user-guide/latest/understanding-comet-plans.md.txt 
b/_sources/user-guide/latest/understanding-comet-plans.md.txt
index 7fb93c8f53..a4d14a1228 100644
--- a/_sources/user-guide/latest/understanding-comet-plans.md.txt
+++ b/_sources/user-guide/latest/understanding-comet-plans.md.txt
@@ -138,6 +138,51 @@ operators were arranged after Comet's serialization). See 
the
 [Metrics Guide](metrics.md) for details on the native metrics that appear in
 this output.
 
+## Programmatic Access to Fallback Reasons
+
+The configs above route fallback reasons to logs or the SQL UI. If you want
+the reasons for a specific query as data — for example, to assert in a test
+or to drive a custom report — use `org.apache.comet.ExtendedExplainInfo`
+directly. It is the same class that backs `spark.comet.explain.format`, and
+it works on any Spark version because it does not rely on the Spark 4.0
+`extendedExplainProviders` extension point.
+
+```scala
+import org.apache.comet.ExtendedExplainInfo
+
+val df = spark.sql("SELECT ...")
+val plan = df.queryExecution.executedPlan
+val info = new ExtendedExplainInfo()
+
+// Sorted, deduplicated list of fallback reasons across the whole plan.
+val reasons: Seq[String] = info.getFallbackReasons(plan)
+
+// Formatted string. Honors spark.comet.explain.format:
+//   - "verbose"  -> the full plan annotated with per-node fallback reasons
+//   - "fallback" -> just the list of reasons
+val formatted: String = info.generateExtendedInfo(plan)
+```
+
+Example:
+
+```
+val df = spark.sql("SELECT from_unixtime(eventTime) FROM events")
+
+val plan = df.queryExecution.executedPlan
+val info = new org.apache.comet.ExtendedExplainInfo()
+println(info.generateExtendedInfo(plan))
+```
+
+Output
+
+```
+Project [COMET: from_unixtime(eventTime#5L, yyyy-MM-dd HH:mm:ss, Some(GMT)) is 
not fully compatible with Spark. To enable it anyway, set 
spark.comet.expression.FromUnixTime.allowIncompatible=true. For more 
information, refer to the Comet Compatibility Guide 
(https://datafusion.apache.org/comet/user-guide/compatibility.html).]
++- CometNativeColumnarToRow
+   +- CometNativeScan parquet
+
+Comet accelerated 1 out of 2 eligible operators (50%). Final plan contains 1 
transitions between Spark and Comet.
+```
+
 ## Comet Operator Reference
 
 The following sections describe the Comet nodes you will see in plans, grouped
diff --git a/searchindex.js b/searchindex.js
index 3671096812..6fa6acdd5e 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"!": [[49, "id1"]], "%": [[47, "id1"]], "&": 
[[37, "id1"]], "*": [[47, "id2"]], "+": [[47, "id3"]], "-": [[47, "id4"]], "/": 
[[47, "id5"]], "1. Format Your Code": [[34, "format-your-code"]], "1. Install 
Comet": [[54, "install-comet"], [63, "install-comet"]], "1. Native Operators 
(nativeExecs map)": [[23, "native-operators-nativeexecs-map"]], "2. Build and 
Verify": [[34, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[54, 
"clone-iceberg-and-apply- [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"!": [[49, "id1"]], "%": [[47, "id1"]], "&": 
[[37, "id1"]], "*": [[47, "id2"]], "+": [[47, "id3"]], "-": [[47, "id4"]], "/": 
[[47, "id5"]], "1. Format Your Code": [[34, "format-your-code"]], "1. Install 
Comet": [[54, "install-comet"], [63, "install-comet"]], "1. Native Operators 
(nativeExecs map)": [[23, "native-operators-nativeexecs-map"]], "2. Build and 
Verify": [[34, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[54, 
"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 8d20631d13..6bd764e5dc 100644
--- a/user-guide/latest/configs.html
+++ b/user-guide/latest/configs.html
@@ -1443,423 +1443,427 @@ under the License.
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Length</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.LessThan.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.LengthOfJsonArray.enabled</span></code></p></td>
+<td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">LengthOfJsonArray</span></code></p></td>
+<td><p>true</p></td>
+</tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.LessThan.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">LessThan</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.LessThanOrEqual.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.LessThanOrEqual.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">LessThanOrEqual</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Like.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Like.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Like</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Literal.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Literal.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Literal</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Log</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log10.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log10.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Log10</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log2.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Log2.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Log2</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Logarithm.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Logarithm.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Logarithm</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Lower.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Lower.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Lower</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeDate.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeDate.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MakeDate</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeDecimal.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeDecimal.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MakeDecimal</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeTimestamp.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MakeTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MakeTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapContainsKey.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapContainsKey.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapContainsKey</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapEntries.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapEntries.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapEntries</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapFromArrays.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapFromArrays.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapFromArrays</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapFromEntries.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapFromEntries.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapFromEntries</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapKeys.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapKeys.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapKeys</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapValues.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MapValues.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MapValues</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Md5.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Md5.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Md5</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MicrosToTimestamp.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MicrosToTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MicrosToTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MillisToTimestamp.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MillisToTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MillisToTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Minute.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Minute.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Minute</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MonotonicallyIncreasingID.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MonotonicallyIncreasingID.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MonotonicallyIncreasingID</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Month.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Month.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Month</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MonthsBetween.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.MonthsBetween.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">MonthsBetween</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Multiply.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Multiply.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Multiply</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Murmur3Hash.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Murmur3Hash.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Murmur3Hash</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.NextDay.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.NextDay.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">NextDay</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Not.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Not.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Not</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.OctetLength.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.OctetLength.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">OctetLength</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Or.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Or.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Or</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ParseUrl.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ParseUrl.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ParseUrl</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Pi.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Pi.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Pi</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Pow.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Pow.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Pow</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Quarter.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Quarter.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Quarter</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.RLike.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.RLike.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">RLike</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Rand.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Rand.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Rand</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Randn.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Randn.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Randn</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.RegExpReplace.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.RegExpReplace.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">RegExpReplace</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Remainder.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Remainder.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Remainder</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Reverse.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Reverse.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Reverse</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Right.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Right.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Right</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Rint.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Rint.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Rint</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Round.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Round.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Round</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ScalaUDF.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ScalaUDF.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ScalaUDF</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ScalarSubquery.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ScalarSubquery.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ScalarSubquery</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sec.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sec.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sec</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Second.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Second.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Second</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SecondsToTimestamp.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SecondsToTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">SecondsToTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sha1.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sha1.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sha1</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sha2.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sha2.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sha2</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftLeft.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftLeft.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ShiftLeft</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftRight.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftRight.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ShiftRight</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftRightUnsigned.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ShiftRightUnsigned.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ShiftRightUnsigned</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Signum.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Signum.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Signum</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sin.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sin.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sin</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sinh.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sinh.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sinh</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Size.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Size.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Size</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Slice.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Slice.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Slice</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SortArray.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SortArray.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">SortArray</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SortOrder.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SortOrder.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">SortOrder</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SparkPartitionID.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SparkPartitionID.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">SparkPartitionID</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sqrt.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Sqrt.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Sqrt</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StartsWith.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StartsWith.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StartsWith</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StaticInvoke.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StaticInvoke.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StaticInvoke</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringInstr.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringInstr.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringInstr</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringLPad.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringLPad.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringLPad</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringRPad.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringRPad.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringRPad</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringRepeat.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringRepeat.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringRepeat</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringReplace.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringReplace.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringReplace</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringSpace.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringSpace.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringSpace</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringSplit.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringSplit.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringSplit</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringToMap.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringToMap.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringToMap</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTranslate.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTranslate.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringTranslate</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrim.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrim.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringTrim</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimBoth.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimBoth.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringTrimBoth</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimLeft.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimLeft.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringTrimLeft</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimRight.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StringTrimRight.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StringTrimRight</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StructsToCsv.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StructsToCsv.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StructsToCsv</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StructsToJson.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.StructsToJson.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">StructsToJson</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Substring.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Substring.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Substring</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SubstringIndex.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.SubstringIndex.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">SubstringIndex</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Subtract.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Subtract.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Subtract</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Tan.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Tan.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Tan</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Tanh.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Tanh.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Tanh</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToDegrees.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToDegrees.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ToDegrees</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToRadians.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToRadians.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ToRadians</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToUTCTimestamp.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToUTCTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ToUTCTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToUnixTimestamp.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.ToUnixTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">ToUnixTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TruncDate.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TruncDate.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">TruncDate</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TruncTimestamp.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TruncTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">TruncTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TryEval.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.TryEval.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">TryEval</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnaryMinus.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnaryMinus.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnaryMinus</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Unhex.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Unhex.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Unhex</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixDate.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixDate.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnixDate</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixMicros.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixMicros.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnixMicros</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixMillis.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixMillis.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnixMillis</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixSeconds.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixSeconds.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnixSeconds</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixTimestamp.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnixTimestamp.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnixTimestamp</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnscaledValue.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.UnscaledValue.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">UnscaledValue</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Upper.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Upper.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Upper</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.WeekDay.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.WeekDay.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">WeekDay</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.WeekOfYear.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.WeekOfYear.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">WeekOfYear</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.XxHash64.enabled</span></code></p></td>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.XxHash64.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">XxHash64</span></code></p></td>
 <td><p>true</p></td>
 </tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Year.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span 
class="pre">spark.comet.expression.Year.enabled</span></code></p></td>
 <td><p>Enable Comet acceleration for <code class="docutils literal 
notranslate"><span class="pre">Year</span></code></p></td>
 <td><p>true</p></td>
 </tr>
diff --git a/user-guide/latest/understanding-comet-plans.html 
b/user-guide/latest/understanding-comet-plans.html
index 9e0ddf6ca7..a13819c5d4 100644
--- a/user-guide/latest/understanding-comet-plans.html
+++ b/user-guide/latest/understanding-comet-plans.html
@@ -660,6 +660,46 @@ operators were arranged after Comet’s serialization). See 
the
 this output.</p>
 </section>
 </section>
+<section id="programmatic-access-to-fallback-reasons">
+<h2>Programmatic Access to Fallback Reasons<a class="headerlink" 
href="#programmatic-access-to-fallback-reasons" title="Link to this 
heading">#</a></h2>
+<p>The configs above route fallback reasons to logs or the SQL UI. If you want
+the reasons for a specific query as data — for example, to assert in a test
+or to drive a custom report — use <code class="docutils literal 
notranslate"><span 
class="pre">org.apache.comet.ExtendedExplainInfo</span></code>
+directly. It is the same class that backs <code class="docutils literal 
notranslate"><span class="pre">spark.comet.explain.format</span></code>, and
+it works on any Spark version because it does not rely on the Spark 4.0
+<code class="docutils literal notranslate"><span 
class="pre">extendedExplainProviders</span></code> extension point.</p>
+<div class="highlight-scala notranslate"><div 
class="highlight"><pre><span></span><span class="k">import</span><span 
class="w"> </span><span class="nn">org</span><span class="p">.</span><span 
class="nn">apache</span><span class="p">.</span><span 
class="nn">comet</span><span class="p">.</span><span 
class="nc">ExtendedExplainInfo</span>
+
+<span class="kd">val</span><span class="w"> </span><span 
class="n">df</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">spark</span><span class="p">.</span><span 
class="n">sql</span><span class="p">(</span><span class="s">&quot;SELECT 
...&quot;</span><span class="p">)</span>
+<span class="kd">val</span><span class="w"> </span><span 
class="n">plan</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">df</span><span class="p">.</span><span 
class="n">queryExecution</span><span class="p">.</span><span 
class="n">executedPlan</span>
+<span class="kd">val</span><span class="w"> </span><span 
class="n">info</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="k">new</span><span class="w"> </span><span 
class="nc">ExtendedExplainInfo</span><span class="p">()</span>
+
+<span class="c1">// Sorted, deduplicated list of fallback reasons across the 
whole plan.</span>
+<span class="kd">val</span><span class="w"> </span><span 
class="n">reasons</span><span class="p">:</span><span class="w"> </span><span 
class="nc">Seq</span><span class="p">[</span><span 
class="nc">String</span><span class="p">]</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">info</span><span 
class="p">.</span><span class="n">getFallbackReasons</span><span 
class="p">(</span><span class="n">plan</span><span class="p">)</span>
+
+<span class="c1">// Formatted string. Honors spark.comet.explain.format:</span>
+<span class="c1">//   - &quot;verbose&quot;  -&gt; the full plan annotated 
with per-node fallback reasons</span>
+<span class="c1">//   - &quot;fallback&quot; -&gt; just the list of 
reasons</span>
+<span class="kd">val</span><span class="w"> </span><span 
class="n">formatted</span><span class="p">:</span><span class="w"> </span><span 
class="nc">String</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">info</span><span class="p">.</span><span 
class="n">generateExtendedInfo</span><span class="p">(</span><span 
class="n">plan</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>Example:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">val</span> <span 
class="n">df</span> <span class="o">=</span> <span class="n">spark</span><span 
class="o">.</span><span class="n">sql</span><span class="p">(</span><span 
class="s2">&quot;SELECT from_unixtime(eventTime) FROM events&quot;</span><span 
class="p">)</span>
+
+<span class="n">val</span> <span class="n">plan</span> <span 
class="o">=</span> <span class="n">df</span><span class="o">.</span><span 
class="n">queryExecution</span><span class="o">.</span><span 
class="n">executedPlan</span>
+<span class="n">val</span> <span class="n">info</span> <span 
class="o">=</span> <span class="n">new</span> <span class="n">org</span><span 
class="o">.</span><span class="n">apache</span><span class="o">.</span><span 
class="n">comet</span><span class="o">.</span><span 
class="n">ExtendedExplainInfo</span><span class="p">()</span>
+<span class="n">println</span><span class="p">(</span><span 
class="n">info</span><span class="o">.</span><span 
class="n">generateExtendedInfo</span><span class="p">(</span><span 
class="n">plan</span><span class="p">))</span>
+</pre></div>
+</div>
+<p>Output</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">Project</span> <span 
class="p">[</span><span class="n">COMET</span><span class="p">:</span> <span 
class="n">from_unixtime</span><span class="p">(</span><span 
class="n">eventTime</span><span class="c1">#5L, yyyy-MM-dd HH:mm:ss, Some(GMT)) 
is not fully compatible with Spark. To enable it anyway, set 
spark.comet.expression.FromUnixTime.allowIncompatible=true. For more 
information, refer to th [...]
+<span class="o">+-</span> <span class="n">CometNativeColumnarToRow</span>
+   <span class="o">+-</span> <span class="n">CometNativeScan</span> <span 
class="n">parquet</span>
+
+<span class="n">Comet</span> <span class="n">accelerated</span> <span 
class="mi">1</span> <span class="n">out</span> <span class="n">of</span> <span 
class="mi">2</span> <span class="n">eligible</span> <span 
class="n">operators</span> <span class="p">(</span><span 
class="mi">50</span><span class="o">%</span><span class="p">)</span><span 
class="o">.</span> <span class="n">Final</span> <span class="n">plan</span> 
<span class="n">contains</span> <span class="mi">1</span> <span class="n">tran 
[...]
+</pre></div>
+</div>
+</section>
 <section id="comet-operator-reference">
 <h2>Comet Operator Reference<a class="headerlink" 
href="#comet-operator-reference" title="Link to this heading">#</a></h2>
 <p>The following sections describe the Comet nodes you will see in plans, 
grouped


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to