d06a9cc4bd
### What changes were proposed in this pull request? With the latest string to literal optimization https://github.com/apache/spark/pull/26256, some interval strings can not be cast when there are some spaces between signs and unit values. After state `PARSE_SIGN`, it directly goes to `PARSE_UNIT_VALUE` when takes a space character as the end. So when there are some white spaces come before the real unit value, it fails to parse, we should add a new state like `TRIM_VALUE` to trim all these spaces. How to re-produce, which aim the revisions since https://github.com/apache/spark/pull/26256 is merged ```sql select cast(v as interval) from values ('+ 1 second') t(v); select cast(v as interval) from values ('- 1 second') t(v); ``` ### Why are the changes needed? bug fix ### Does this PR introduce any user-facing change? no ### How was this patch tested? 1. ut 2. new benchmark test Closes #26449 from yaooqinn/SPARK-29605. Authored-by: Kent Yao <yaooqinn@hotmail.com> Signed-off-by: Wenchen Fan <wenchen@databricks.com>
30 lines
3.2 KiB
Plaintext
30 lines
3.2 KiB
Plaintext
Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.14.6
|
|
Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz
|
|
cast strings to intervals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
prepare string w/ interval 574 610 45 1.7 573.9 1.0X
|
|
prepare string w/o interval 518 538 27 1.9 517.7 1.1X
|
|
1 units w/ interval 425 439 16 2.4 425.3 1.3X
|
|
1 units w/o interval 385 393 10 2.6 385.2 1.5X
|
|
2 units w/ interval 553 561 11 1.8 553.1 1.0X
|
|
2 units w/o interval 531 543 11 1.9 531.0 1.1X
|
|
3 units w/ interval 1134 1159 32 0.9 1134.0 0.5X
|
|
3 units w/o interval 1121 1126 6 0.9 1121.3 0.5X
|
|
4 units w/ interval 1226 1250 21 0.8 1226.1 0.5X
|
|
4 units w/o interval 1227 1239 11 0.8 1227.1 0.5X
|
|
5 units w/ interval 1375 1447 93 0.7 1374.7 0.4X
|
|
5 units w/o interval 1335 1346 19 0.7 1335.1 0.4X
|
|
6 units w/ interval 1530 1556 24 0.7 1529.5 0.4X
|
|
6 units w/o interval 1481 1492 17 0.7 1480.7 0.4X
|
|
7 units w/ interval 1730 1745 14 0.6 1729.9 0.3X
|
|
7 units w/o interval 1788 1859 112 0.6 1788.1 0.3X
|
|
8 units w/ interval 1952 2087 117 0.5 1951.7 0.3X
|
|
8 units w/o interval 2083 2207 209 0.5 2082.5 0.3X
|
|
9 units w/ interval 2228 2291 60 0.4 2227.5 0.3X
|
|
9 units w/o interval 2130 2184 75 0.5 2130.1 0.3X
|
|
10 units w/ interval 2414 2502 81 0.4 2413.8 0.2X
|
|
10 units w/o interval 2463 2488 35 0.4 2463.1 0.2X
|
|
11 units w/ interval 2717 2755 42 0.4 2716.8 0.2X
|
|
11 units w/o interval 2578 2661 77 0.4 2577.7 0.2X
|
|
|