github-actions[bot] commented on code in PR #66413:
URL: https://github.com/apache/doris/pull/66413#discussion_r3712067485


##########
fe/fe-core/src/main/java/org/apache/doris/planner/PluginDrivenTableSink.java:
##########
@@ -178,6 +194,13 @@ public String getExplainString(String prefix, 
TExplainLevel explainLevel) {
     @Override
     public void bindDataSink(Optional<InsertCommandContext> insertCtx)
             throws AnalysisException {
+        if (writeOperation == WriteOperation.MERGE && !writesDataFiles
+                && Config.be_exec_version < 
SUPPORT_ICEBERG_VARIANT_EXEC_VERSION) {

Review Comment:
   [P1] Keep non-Variant delete-only MERGE available during rolling upgrades
   
   `writesDataFiles` is false for every delete-only MERGE, so this rejects even 
tables whose schema has no Variant whenever `be_exec_version` is 11. Those 
queries were supported before this change: an old BE opens the table writer, 
but with no insert rows it creates no partition writers or data files; only a 
Variant schema makes the old parser fail. The matching BE check is equally 
schema-blind, and the new test uses an empty/non-Variant column list, so it 
pins this regression instead of the intended Variant-only fence. Please apply 
the version fence only when the omitted writer schema contains Variant, and 
retain coverage that ordinary delete-only MERGE remains allowed at version 11.



##########
be/src/core/column/variant_v2/column_variant_v2.cpp:
##########
@@ -808,6 +911,21 @@ void ColumnVariantV2::insert_indices_from( // 
NOLINT(readability-function-size)
         return;
     }
 
+    if (_shredded) {

Review Comment:
   [P1] Do not buffer incomplete Variant states across the exchange
   
   The first indexed selection into an empty destination adopts 
`source._shredded`, but the next batch reaches this branch and calls 
`ensure_encoded()`; a leaf-only Parquet projection cannot materialize and 
throws. This is reachable when `v['n']` is projected above a partitioned hash 
join: nested pruning sends the raw partial `v` through the child shuffle, where 
one channel buffers selections from consecutive scan blocks. Adding the 
`insert_range_from()`-style `try_append()` only fixes identical schemas: 
Parquet permits different files to shred the same path with incompatible types, 
while `try_append()` requires exact schema equality and the incomplete fallback 
still cannot encode. Please consume the leaf into a common logical 
representation before exchange, or use an accumulator that preserves 
heterogeneous partial states; cover both two same-schema blocks and two files 
with conflicting shredded leaf types.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to