Commit cd37d7a
authored
[VL] Fall back to vanilla Delta write for unsupported schemas (#12444)
Velox cannot write every Spark type. When native Delta write is enabled, Gluten
offloads certain Delta write commands to the native writer via OffloadDeltaCommand
-- DataFrameWriter.save (append/overwrite), CREATE/REPLACE TABLE AS SELECT,
UPDATE, DELETE and OPTIMIZE. The native write path inserts a RowToVeloxColumnarExec
transition whose SparkArrowUtil.toArrowSchema call throws
`UnsupportedOperationException: Unsupported data type: <type>` at runtime for any
type it has no Arrow mapping for (VariantType is the motivating example). (Plain
SQL INSERT INTO and MERGE are not offloaded and were unaffected.)
Guard GlutenOptimisticTransaction.writeFiles with the backend's existing schema
validator: if VeloxValidatorApi.validateSchema reports the input schema is not
supported, delegate to super.writeFiles (the vanilla Delta write path) instead of
offloading. This reuses the same check Velox already applies to scan schemas, so
unsupported types fall back consistently before Arrow schema conversion rather
than adding a one-off VariantType guard. Supported writes are unaffected, and the
validator's reason is logged when it falls back.
Adds DeltaVariantWriteSuite, which exercises offloaded writes: top-level
and struct-nested variant columns via DataFrameWriter.save, plus an UPDATE.1 parent 022bc4b commit cd37d7a
2 files changed
Lines changed: 108 additions & 1 deletion
File tree
- backends-velox/src-delta40
- main/scala/org/apache/spark/sql/delta
- test/scala/org/apache/spark/sql/delta
backends-velox/src-delta40/main/scala/org/apache/spark/sql/delta/GlutenOptimisticTransaction.scala
Lines changed: 14 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
51 | 64 | | |
52 | 65 | | |
53 | 66 | | |
| |||
Lines changed: 94 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
0 commit comments