diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala index 7757ea51536c..ffadd9505251 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala @@ -847,9 +847,10 @@ object DateTimeUtils { * since 1970-01-01 00:00:00 local time. */ def getEpoch(timestamp: SQLTimestamp, zoneId: ZoneId): Decimal = { - val offset = zoneId.getRules.getOffset(microsToInstant(timestamp)).getTotalSeconds - val sinceEpoch = BigDecimal(timestamp) / MICROS_PER_SECOND + offset - new Decimal().set(sinceEpoch, 20, 6) + val offset = SECONDS.toMicros( + zoneId.getRules.getOffset(microsToInstant(timestamp)).getTotalSeconds) + val sinceEpoch = timestamp + offset + Decimal(sinceEpoch, 20, 6) } def currentTimestamp(): SQLTimestamp = instantToMicros(Instant.now()) diff --git a/sql/core/benchmarks/ExtractBenchmark-results.txt b/sql/core/benchmarks/ExtractBenchmark-results.txt index 4894db4c522f..2e1df667bbe8 100644 --- a/sql/core/benchmarks/ExtractBenchmark-results.txt +++ b/sql/core/benchmarks/ExtractBenchmark-results.txt @@ -1,100 +1,100 @@ -OpenJDK 64-Bit Server VM 1.8.0_222-b10 on Linux 3.10.0-862.3.2.el7.x86_64 -Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +Java HotSpot(TM) 64-Bit Server VM 1.8.0_202-b08 on Mac OS X 10.14.6 +Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz Invoke extract for timestamp: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------------------------------ -cast to timestamp 375 411 52 26.7 37.5 1.0X -MILLENNIUM of timestamp 1389 1410 34 7.2 138.9 0.3X -CENTURY of timestamp 1327 1345 25 7.5 132.7 0.3X -DECADE of timestamp 1214 1257 59 8.2 121.4 0.3X -YEAR of timestamp 1185 1192 6 8.4 118.5 0.3X -ISOYEAR of timestamp 1297 1371 93 7.7 129.7 0.3X -QUARTER of timestamp 1375 1395 32 7.3 137.5 0.3X -MONTH of timestamp 1179 1191 17 8.5 117.9 0.3X -WEEK of timestamp 1760 1778 21 5.7 176.0 0.2X -DAY of timestamp 1177 1185 8 8.5 117.7 0.3X -DAYOFWEEK of timestamp 1330 1331 1 7.5 133.0 0.3X -DOW of timestamp 1335 1362 43 7.5 133.5 0.3X -ISODOW of timestamp 1277 1282 8 7.8 127.7 0.3X -DOY of timestamp 1195 1208 16 8.4 119.5 0.3X -HOUR of timestamp 335 342 6 29.8 33.5 1.1X -MINUTE of timestamp 322 330 7 31.1 32.2 1.2X -SECOND of timestamp 324 330 8 30.9 32.4 1.2X -MILLISECONDS of timestamp 543 550 6 18.4 54.3 0.7X -MICROSECONDS of timestamp 426 431 8 23.5 42.6 0.9X -EPOCH of timestamp 29807 29831 29 0.3 2980.7 0.0X +cast to timestamp 254 275 35 39.4 25.4 1.0X +MILLENNIUM of timestamp 1149 1159 9 8.7 114.9 0.2X +CENTURY of timestamp 1102 1115 16 9.1 110.2 0.2X +DECADE of timestamp 1024 1036 11 9.8 102.4 0.2X +YEAR of timestamp 1000 1004 5 10.0 100.0 0.3X +ISOYEAR of timestamp 1090 1101 11 9.2 109.0 0.2X +QUARTER of timestamp 1169 1178 7 8.6 116.9 0.2X +MONTH of timestamp 981 984 4 10.2 98.1 0.3X +WEEK of timestamp 1372 1388 14 7.3 137.2 0.2X +DAY of timestamp 994 1000 7 10.1 99.4 0.3X +DAYOFWEEK of timestamp 1102 1108 6 9.1 110.2 0.2X +DOW of timestamp 1102 1105 3 9.1 110.2 0.2X +ISODOW of timestamp 1063 1078 18 9.4 106.3 0.2X +DOY of timestamp 1015 1021 5 9.9 101.5 0.2X +HOUR of timestamp 385 390 5 26.0 38.5 0.7X +MINUTE of timestamp 387 391 7 25.8 38.7 0.7X +SECOND of timestamp 381 382 1 26.2 38.1 0.7X +MILLISECONDS of timestamp 584 588 4 17.1 58.4 0.4X +MICROSECONDS of timestamp 482 500 16 20.8 48.2 0.5X +EPOCH of timestamp 957 961 6 10.4 95.7 0.3X -OpenJDK 64-Bit Server VM 1.8.0_222-b10 on Linux 3.10.0-862.3.2.el7.x86_64 -Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +Java HotSpot(TM) 64-Bit Server VM 1.8.0_202-b08 on Mac OS X 10.14.6 +Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz Invoke extract for date: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------------------------------ -cast to date 976 983 7 10.2 97.6 1.0X -MILLENNIUM of date 1265 1271 7 7.9 126.5 0.8X -CENTURY of date 1273 1285 20 7.9 127.3 0.8X -DECADE of date 1158 1166 8 8.6 115.8 0.8X -YEAR of date 1165 1177 19 8.6 116.5 0.8X -ISOYEAR of date 1394 1399 5 7.2 139.4 0.7X -QUARTER of date 1463 1464 1 6.8 146.3 0.7X -MONTH of date 1153 1156 3 8.7 115.3 0.8X -WEEK of date 1743 1748 9 5.7 174.3 0.6X -DAY of date 1145 1150 5 8.7 114.5 0.9X -DAYOFWEEK of date 1315 1316 2 7.6 131.5 0.7X -DOW of date 1315 1325 14 7.6 131.5 0.7X -ISODOW of date 1267 1269 2 7.9 126.7 0.8X -DOY of date 1193 1203 17 8.4 119.3 0.8X -HOUR of date 1419 1428 15 7.0 141.9 0.7X -MINUTE of date 1416 1423 6 7.1 141.6 0.7X -SECOND of date 1412 1416 6 7.1 141.2 0.7X -MILLISECONDS of date 1671 1676 9 6.0 167.1 0.6X -MICROSECONDS of date 1524 1528 4 6.6 152.4 0.6X -EPOCH of date 30922 30959 54 0.3 3092.2 0.0X +cast to date 834 842 12 12.0 83.4 1.0X +MILLENNIUM of date 1078 1088 16 9.3 107.8 0.8X +CENTURY of date 1063 1067 4 9.4 106.3 0.8X +DECADE of date 989 992 3 10.1 98.9 0.8X +YEAR of date 975 976 1 10.3 97.5 0.9X +ISOYEAR of date 1177 1186 9 8.5 117.7 0.7X +QUARTER of date 1219 1222 4 8.2 121.9 0.7X +MONTH of date 982 992 10 10.2 98.2 0.8X +WEEK of date 1360 1364 6 7.4 136.0 0.6X +DAY of date 973 980 7 10.3 97.3 0.9X +DAYOFWEEK of date 1100 1104 7 9.1 110.0 0.8X +DOW of date 1091 1096 4 9.2 109.1 0.8X +ISODOW of date 1053 1057 6 9.5 105.3 0.8X +DOY of date 1006 1012 4 9.9 100.6 0.8X +HOUR of date 1683 1688 6 5.9 168.3 0.5X +MINUTE of date 1686 1691 5 5.9 168.6 0.5X +SECOND of date 1706 1714 7 5.9 170.6 0.5X +MILLISECONDS of date 1881 1887 6 5.3 188.1 0.4X +MICROSECONDS of date 1767 1778 16 5.7 176.7 0.5X +EPOCH of date 2274 2281 7 4.4 227.4 0.4X -OpenJDK 64-Bit Server VM 1.8.0_222-b10 on Linux 3.10.0-862.3.2.el7.x86_64 -Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +Java HotSpot(TM) 64-Bit Server VM 1.8.0_202-b08 on Mac OS X 10.14.6 +Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz Invoke date_part for timestamp: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------------------------------ -cast to timestamp 292 296 7 34.3 29.2 1.0X -MILLENNIUM of timestamp 1263 1274 10 7.9 126.3 0.2X -CENTURY of timestamp 1271 1275 4 7.9 127.1 0.2X -DECADE of timestamp 1154 1157 3 8.7 115.4 0.3X -YEAR of timestamp 1151 1157 10 8.7 115.1 0.3X -ISOYEAR of timestamp 1392 1393 1 7.2 139.2 0.2X -QUARTER of timestamp 1463 1476 12 6.8 146.3 0.2X -MONTH of timestamp 1157 1173 20 8.6 115.7 0.3X -WEEK of timestamp 1742 1749 9 5.7 174.2 0.2X -DAY of timestamp 1140 1145 5 8.8 114.0 0.3X -DAYOFWEEK of timestamp 1312 1317 5 7.6 131.2 0.2X -DOW of timestamp 1318 1321 3 7.6 131.8 0.2X -ISODOW of timestamp 1268 1270 2 7.9 126.8 0.2X -DOY of timestamp 1194 1197 3 8.4 119.4 0.2X -HOUR of timestamp 327 330 4 30.6 32.7 0.9X -MINUTE of timestamp 320 326 9 31.3 32.0 0.9X -SECOND of timestamp 320 329 16 31.2 32.0 0.9X -MILLISECONDS of timestamp 540 544 7 18.5 54.0 0.5X -MICROSECONDS of timestamp 431 438 11 23.2 43.1 0.7X -EPOCH of timestamp 29802 29824 32 0.3 2980.2 0.0X +cast to timestamp 212 214 3 47.2 21.2 1.0X +MILLENNIUM of timestamp 1082 1092 10 9.2 108.2 0.2X +CENTURY of timestamp 1087 1089 2 9.2 108.7 0.2X +DECADE of timestamp 986 1001 21 10.1 98.6 0.2X +YEAR of timestamp 983 985 2 10.2 98.3 0.2X +ISOYEAR of timestamp 1160 1168 12 8.6 116.0 0.2X +QUARTER of timestamp 1219 1228 9 8.2 121.9 0.2X +MONTH of timestamp 973 979 5 10.3 97.3 0.2X +WEEK of timestamp 1348 1357 8 7.4 134.8 0.2X +DAY of timestamp 969 974 5 10.3 96.9 0.2X +DAYOFWEEK of timestamp 1093 1096 3 9.1 109.3 0.2X +DOW of timestamp 1089 1096 7 9.2 108.9 0.2X +ISODOW of timestamp 1048 1056 7 9.5 104.8 0.2X +DOY of timestamp 1007 1011 5 9.9 100.7 0.2X +HOUR of timestamp 385 387 3 26.0 38.5 0.6X +MINUTE of timestamp 382 384 2 26.2 38.2 0.6X +SECOND of timestamp 377 378 1 26.5 37.7 0.6X +MILLISECONDS of timestamp 572 574 2 17.5 57.2 0.4X +MICROSECONDS of timestamp 473 490 18 21.1 47.3 0.4X +EPOCH of timestamp 937 947 11 10.7 93.7 0.2X -OpenJDK 64-Bit Server VM 1.8.0_222-b10 on Linux 3.10.0-862.3.2.el7.x86_64 -Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +Java HotSpot(TM) 64-Bit Server VM 1.8.0_202-b08 on Mac OS X 10.14.6 +Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz Invoke date_part for date: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------------------------------ -cast to date 976 981 8 10.2 97.6 1.0X -MILLENNIUM of date 1264 1268 7 7.9 126.4 0.8X -CENTURY of date 1267 1275 14 7.9 126.7 0.8X -DECADE of date 1150 1153 4 8.7 115.0 0.8X -YEAR of date 1150 1154 6 8.7 115.0 0.8X -ISOYEAR of date 1390 1393 3 7.2 139.0 0.7X -QUARTER of date 1459 1462 3 6.9 145.9 0.7X -MONTH of date 1149 1150 1 8.7 114.9 0.8X -WEEK of date 1740 1741 1 5.7 174.0 0.6X -DAY of date 1145 1153 14 8.7 114.5 0.9X -DAYOFWEEK of date 1311 1314 3 7.6 131.1 0.7X -DOW of date 1318 1320 3 7.6 131.8 0.7X -ISODOW of date 1264 1266 2 7.9 126.4 0.8X -DOY of date 1187 1189 3 8.4 118.7 0.8X -HOUR of date 1418 1419 1 7.1 141.8 0.7X -MINUTE of date 1410 1412 2 7.1 141.0 0.7X -SECOND of date 1414 1415 1 7.1 141.4 0.7X -MILLISECONDS of date 1669 1676 5 6.0 166.9 0.6X -MICROSECONDS of date 1519 1525 6 6.6 151.9 0.6X -EPOCH of date 30900 30950 56 0.3 3090.0 0.0X +cast to date 835 836 1 12.0 83.5 1.0X +MILLENNIUM of date 1062 1070 10 9.4 106.2 0.8X +CENTURY of date 1060 1068 12 9.4 106.0 0.8X +DECADE of date 984 992 8 10.2 98.4 0.8X +YEAR of date 971 973 3 10.3 97.1 0.9X +ISOYEAR of date 1158 1175 22 8.6 115.8 0.7X +QUARTER of date 1239 1239 0 8.1 123.9 0.7X +MONTH of date 972 987 23 10.3 97.2 0.9X +WEEK of date 1346 1350 5 7.4 134.6 0.6X +DAY of date 970 971 1 10.3 97.0 0.9X +DAYOFWEEK of date 1099 1107 10 9.1 109.9 0.8X +DOW of date 1089 1091 2 9.2 108.9 0.8X +ISODOW of date 1053 1062 13 9.5 105.3 0.8X +DOY of date 1008 1010 4 9.9 100.8 0.8X +HOUR of date 1697 1703 7 5.9 169.7 0.5X +MINUTE of date 1697 1699 3 5.9 169.7 0.5X +SECOND of date 1682 1692 8 5.9 168.2 0.5X +MILLISECONDS of date 1884 1890 7 5.3 188.4 0.4X +MICROSECONDS of date 1765 1770 7 5.7 176.5 0.5X +EPOCH of date 2273 2282 8 4.4 227.3 0.4X