Commit e70ca04
authored
[Spark] Fix type widening with char/varchar columns (#3744)
## Description
Using type widening on a table that contains a char/varchar column
causes the following reads to fail with
`DELTA_UNSUPPORTED_TYPE_CHANGE_IN_SCHEMA`:
```
CREATE TABLE t (a VARCHAR(10), b INT);
ALTER TABLE t SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true');
ALTER TABLE t ALTER COLUMN b TYPE LONG;
SELECT * FROM t;
[DELTA_UNSUPPORTED_TYPE_CHANGE_IN_SCHEMA] Unable to operate on this table because an unsupported type change was applied. Field cut was changed from VARCHAR(10) to STRING`
```
Type changes are recorded in the table metadata and a check on read
ensures that all type changes are supported by the current
implementation as attempting to read data after an unsupported type
change could lead to incorrect results.
CHAR/VARCHAR columns are sometimes stripped down to STRING internally,
for that reason, ALTER TABLE incorrectly identify that column `a` type
changed to STRING and records it in the type widening metadata.
The read check in turn doesn't recognize that type change as one of the
supported widening type changes (which doesn't include changes to string
columns).
Fix:
1. Never record char/varchar/string type changes in the type widening
metadata
2. Never record unsupported type changes in the type widening metadata
and log an assertion instead.
3. Don't fail on char/varchar/string type changes in the type widening
metadata if such type change slips through 1. This will prevent failing
in case a non-compliant implementation still record a
char/varchar/string type change.
4. Provide a table property to bypass the check if a similar issue
happens again in the future.1 parent 3b15f0e commit e70ca04
File tree
8 files changed
+191
-56
lines changed- spark/src
- main/scala/org/apache/spark/sql/delta
- commands
- sources
- test/scala/org/apache/spark/sql/delta/typewidening
8 files changed
+191
-56
lines changedLines changed: 5 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| |||
73 | 74 | | |
74 | 75 | | |
75 | 76 | | |
76 | | - | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
77 | 81 | | |
78 | 82 | | |
79 | 83 | | |
| |||
Lines changed: 11 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
| |||
80 | 82 | | |
81 | 83 | | |
82 | 84 | | |
83 | | - | |
84 | | - | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
85 | 88 | | |
86 | 89 | | |
87 | 90 | | |
88 | 91 | | |
89 | 92 | | |
90 | 93 | | |
91 | 94 | | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
92 | 101 | | |
93 | 102 | | |
94 | 103 | | |
| |||
Lines changed: 16 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
| 191 | + | |
| 192 | + | |
192 | 193 | | |
193 | 194 | | |
194 | 195 | | |
195 | 196 | | |
196 | 197 | | |
197 | 198 | | |
198 | | - | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
199 | 213 | | |
200 | 214 | | |
201 | 215 | | |
| |||
Lines changed: 4 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
720 | 720 | | |
721 | 721 | | |
722 | 722 | | |
723 | | - | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
724 | 727 | | |
725 | 728 | | |
726 | 729 | | |
| |||
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1074 | 1074 | | |
1075 | 1075 | | |
1076 | 1076 | | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
1077 | 1091 | | |
1078 | 1092 | | |
1079 | 1093 | | |
| |||
Lines changed: 35 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
123 | 158 | | |
124 | 159 | | |
125 | 160 | | |
| |||
Lines changed: 33 additions & 50 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
292 | 292 | | |
293 | 293 | | |
294 | 294 | | |
295 | | - | |
| 295 | + | |
296 | 296 | | |
297 | | - | |
| 297 | + | |
298 | 298 | | |
299 | | - | |
| 299 | + | |
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | 303 | | |
304 | | - | |
| 304 | + | |
305 | 305 | | |
306 | 306 | | |
307 | | - | |
| 307 | + | |
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
311 | | - | |
| 311 | + | |
312 | 312 | | |
313 | 313 | | |
314 | | - | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
| 314 | + | |
322 | 315 | | |
323 | 316 | | |
324 | 317 | | |
| |||
332 | 325 | | |
333 | 326 | | |
334 | 327 | | |
335 | | - | |
336 | 328 | | |
337 | 329 | | |
338 | 330 | | |
339 | 331 | | |
340 | 332 | | |
341 | 333 | | |
342 | | - | |
| 334 | + | |
343 | 335 | | |
344 | 336 | | |
345 | | - | |
346 | | - | |
| 337 | + | |
| 338 | + | |
347 | 339 | | |
348 | 340 | | |
349 | 341 | | |
350 | | - | |
| 342 | + | |
351 | 343 | | |
352 | 344 | | |
353 | | - | |
354 | | - | |
355 | | - | |
356 | | - | |
357 | | - | |
358 | | - | |
359 | | - | |
360 | | - | |
361 | | - | |
362 | | - | |
| 345 | + | |
| 346 | + | |
363 | 347 | | |
364 | 348 | | |
365 | 349 | | |
| |||
374 | 358 | | |
375 | 359 | | |
376 | 360 | | |
377 | | - | |
378 | 361 | | |
379 | 362 | | |
380 | 363 | | |
381 | 364 | | |
382 | 365 | | |
383 | 366 | | |
384 | 367 | | |
385 | | - | |
| 368 | + | |
386 | 369 | | |
387 | | - | |
| 370 | + | |
388 | 371 | | |
389 | | - | |
| 372 | + | |
390 | 373 | | |
391 | 374 | | |
392 | 375 | | |
393 | 376 | | |
394 | 377 | | |
395 | 378 | | |
396 | | - | |
| 379 | + | |
397 | 380 | | |
398 | 381 | | |
399 | | - | |
| 382 | + | |
400 | 383 | | |
401 | 384 | | |
402 | 385 | | |
403 | | - | |
| 386 | + | |
404 | 387 | | |
405 | 388 | | |
406 | 389 | | |
407 | 390 | | |
408 | 391 | | |
409 | 392 | | |
410 | 393 | | |
411 | | - | |
| 394 | + | |
412 | 395 | | |
413 | 396 | | |
414 | | - | |
| 397 | + | |
415 | 398 | | |
416 | 399 | | |
417 | 400 | | |
| |||
426 | 409 | | |
427 | 410 | | |
428 | 411 | | |
429 | | - | |
| 412 | + | |
430 | 413 | | |
431 | 414 | | |
432 | | - | |
433 | | - | |
| 415 | + | |
| 416 | + | |
434 | 417 | | |
435 | 418 | | |
436 | 419 | | |
437 | | - | |
| 420 | + | |
438 | 421 | | |
439 | 422 | | |
440 | 423 | | |
441 | | - | |
| 424 | + | |
442 | 425 | | |
443 | 426 | | |
444 | 427 | | |
445 | 428 | | |
446 | | - | |
| 429 | + | |
447 | 430 | | |
448 | 431 | | |
449 | | - | |
450 | | - | |
| 432 | + | |
| 433 | + | |
451 | 434 | | |
452 | 435 | | |
453 | 436 | | |
| |||
459 | 442 | | |
460 | 443 | | |
461 | 444 | | |
462 | | - | |
463 | | - | |
| 445 | + | |
| 446 | + | |
464 | 447 | | |
465 | 448 | | |
466 | 449 | | |
467 | 450 | | |
468 | 451 | | |
469 | 452 | | |
470 | | - | |
| 453 | + | |
471 | 454 | | |
472 | 455 | | |
473 | | - | |
| 456 | + | |
474 | 457 | | |
475 | 458 | | |
476 | 459 | | |
| |||
0 commit comments