Visorgood opened a new issue, #7622:
URL: https://github.com/apache/datafusion-comet/issues/7622

   ### Describe the bug
   
   In the split Iceberg write plan, both write nodes are printed with Spark's 
`!` prefix, which marks a node whose input attributes are missing:
   
   ```
   IcebergCommit IcebergBatchWrite(table=local.db.dst, format=PARQUET), ...
   +- AdaptiveSparkPlan isFinalPlan=false
      +- !CometIcebergWrite [iceberg_commit_message#NN], ...
   ```
   
   Both nodes take `output` (the `iceberg_commit_message` attribute) as a 
constructor argument but don't override `producedAttributes`. Spark therefore 
counts that attribute in `references`, and since no child produces it, 
`missingInput` is non-empty. The write itself runs correctly; the plan only 
looks broken. Spark's own `AppendData` node (Comet disabled) has no `!`.
   
   This is the same class of issue as #2214 (`CometHashAggregate`) and #2789 
(`CometWindowExec`).
   
   ### Steps to reproduce
   
   Comet `main` at `4de670439`, Spark 4.1.3, Iceberg 1.11.0, `spark-shell` with 
a Hadoop catalog named `local` and `spark.comet.write.iceberg.enabled=true`:
   
   ```scala
   spark.sql("CREATE TABLE local.db.src (id INT, amount INT) USING iceberg")
   spark.sql("INSERT INTO local.db.src VALUES (1, 10), (2, 20)")
   spark.sql("CREATE TABLE local.db.dst (id INT, amount INT) USING iceberg")
   spark.sql("CREATE TABLE local.db.dst_orc (id INT, amount INT) USING iceberg 
TBLPROPERTIES ('write.format.default'='orc')")
   
   // native write
   spark.sql("EXPLAIN INSERT INTO local.db.dst SELECT * FROM local.db.src")
   // ORC is not written natively, so the write stays on iceberg-java
   spark.sql("EXPLAIN INSERT INTO local.db.dst_orc SELECT * FROM local.db.src")
   ```
   
   Native write:
   ```
   == Physical Plan ==
   IcebergCommit IcebergBatchWrite(table=local.db.dst, format=PARQUET), 
IcebergWrite(table=local.db.dst, format=PARQUET), 
org.apache.comet.iceberg.IcebergWriteStrategy$$Lambda/0x00000070021c8ba8@1b766d44
   +- !CometIcebergWrite [iceberg_commit_message#303], 
/tmp/iceberg-warehouse/db/dst/data, ICEBERG_WRITER_UNPARTITIONED
      +- CometIcebergNativeScan [id#292, amount#293], 
/tmp/iceberg-warehouse/db/src/metadata/v2.metadata.json, 
IcebergScan(table=local.db.src, schemaId=0, snapshotId=7721505751242735037, 
branch=null, filters=, runtimeFilters=, groupedBy=), 2
   ```
   
   Fallback to iceberg-java:
   ```
   == Physical Plan ==
   IcebergCommit IcebergBatchWrite(table=local.db.dst_orc, format=ORC), 
IcebergWrite(table=local.db.dst_orc, format=ORC), 
org.apache.comet.iceberg.IcebergWriteStrategy$$Lambda/0x00000070021c8ba8@4ba48bc7
   +- !IcebergWrite IcebergBatchWrite(table=local.db.dst_orc, format=ORC), 
[iceberg_commit_message#322], PlainIcebergWrite
      +- *(1) CometColumnarToRow
         +- CometIcebergNativeScan [id#311, amount#312], 
/tmp/iceberg-warehouse/db/src/metadata/v2.metadata.json, 
IcebergScan(table=local.db.src, schemaId=0, snapshotId=7721505751242735037, 
branch=null, filters=, runtimeFilters=, groupedBy=), 2
   ```
   
   ### Expected behavior
   
   No `!` on `IcebergWrite` and `CometIcebergWrite`: the commit-message 
attribute is produced by the node itself, so `missingInput` should be empty.
   
   ### Additional context
   
   Proposed fix: `override def producedAttributes: AttributeSet = outputSet` in 
`IcebergWriteExec` and `CometIcebergWriteExec`, as `CometProjectExec` already 
does, plus a test that asserts `missingInput.isEmpty` for both nodes in an 
existing `CometIcebergWriteActionSuite` write.
   
   ### Willingness to contribute
   
   I can contribute a fix for this bug independently


-- 
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