Fix columnar mismatch bug in iceberg dml when aqe enabled. - #13926
Conversation
Signed-off-by: liurenjie1024 <liurenjie2008@gmail.com>
Greptile OverviewGreptile SummaryFixed columnar mismatch bug in Iceberg DML operations when Adaptive Query Execution (AQE) is enabled by properly handling Key Changes
Root CauseWhen AQE is enabled, Confidence Score: 5/5
Important Files ChangedFile Analysis
Sequence DiagramsequenceDiagram
participant User as User Query
participant Meta as SparkPlanMeta
participant IcebergProvider as IcebergProviderImpl
participant WriteExec as GpuV2TableWriteExec
participant AQE as AdaptiveSparkPlanExec
participant FinalQuery as finalQuery
Note over User,FinalQuery: When AQE is Enabled
User->>Meta: tagForGpu()
Meta->>IcebergProvider: tagForGpu(cpuExec, meta)
IcebergProvider->>IcebergProvider: checkChildPlan(meta)
alt Child is AdaptiveSparkPlanExec
IcebergProvider-->>Meta: Allow (AQE handles columnar)
else Child cannot run on GPU
IcebergProvider-->>Meta: willNotWorkOnGpu()
end
User->>Meta: convertToGpu()
Meta->>IcebergProvider: convertToGpu(cpuExec, meta)
IcebergProvider->>WriteExec: Create GpuAppendDataExec(inner, ...)
Note over WriteExec: inner = meta.childPlans.head.convertIfNeeded()
User->>WriteExec: execute()
WriteExec->>FinalQuery: Determine finalQuery
alt query is AdaptiveSparkPlanExec
FinalQuery->>AQE: aqe.copy(supportsColumnar = true)
Note over AQE: AQE now supports columnar output
else query is GpuColumnarToRowExec
FinalQuery->>FinalQuery: Unwrap to get inner plan
else
FinalQuery->>FinalQuery: Use query as-is
end
WriteExec->>FinalQuery: executeColumnar()
FinalQuery-->>WriteExec: RDD[ColumnarBatch]
WriteExec->>WriteExec: writeWithV2(batchWrite)
WriteExec-->>User: Write complete
|
|
build |
Fixes nvbugs 5689547.
Description
When aqe is enabled, we need to change it to support columnar for iceberg dml operations. This pr also added necessary tests.
Checklists
(Please explain in the PR description how the new code paths are tested, such as names of the new/existing tests that cover them.)