This is an automated email from the ASF dual-hosted git repository.
LuciferYang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 83030bc0f2ba [SPARK-56874][SQL] Fast-path `DateTimeUtils.daysToMicros`
for `ZoneOffset.UTC`
83030bc0f2ba is described below
commit 83030bc0f2ba17b5c28e7cc647d77451a4696713
Author: YangJie <[email protected]>
AuthorDate: Sun May 17 23:48:15 2026 +0800
[SPARK-56874][SQL] Fast-path `DateTimeUtils.daysToMicros` for
`ZoneOffset.UTC`
### What changes were proposed in this pull request?
Add a `ZoneOffset.UTC` fast path to `DateTimeUtils.daysToMicros(days,
zoneId)`:
```scala
if (zoneId eq ZoneOffset.UTC) {
Math.multiplyExact(days.toLong, MICROS_PER_DAY)
} else {
// existing LocalDate -> ZonedDateTime -> Instant path
}
```
For UTC the answer is simply `days * MICROS_PER_DAY`, so the slow path's
three heap allocations (`LocalDate`, `ZonedDateTime`, `Instant`) are wasted.
### Why are the changes needed?
`daysToMicros(days, ZoneOffset.UTC)` is on the per-row hot path of the
vectorized parquet reader (`DateToTimestampNTZUpdater` and the rebase
variants), the row-based parquet converter (`ParquetRowConverter`), the Avro
reader (`AvroDeserializer`), and DATE -> TIMESTAMP `Cast` (interpreted +
codegen). All of them pass the `ZoneOffset.UTC` singleton, so the
reference-equality fast path triggers everywhere it matters.
The updated results of `DateToTimestampNTZUpdater` in
`ParquetVectorUpdaterBenchmark` are as follows:
| JDK | Baseline | After | Speedup |
|----:|---------:|----------:|--------:|
| 17 | 29.5 M/s | 357.5 M/s | 12.11x |
| 21 | 38.6 M/s | 366.1 M/s | 9.48x |
| 25 | 36.6 M/s | 378.3 M/s | 10.33x |
### Does this PR introduce _any_ user-facing change?
No, pure optimization. Behavior is preserved for every input in Spark's
valid `DateType` range. Both paths use `Math.multiplyExact` internally and
overflow at the same `|days| ~= 107M` boundary with the same
`ArithmeticException`, far outside any reachable input.
### How was this patch tested?
New `DateTimeUtilsSuite` contract test pins down the UTC fast path:
- Asserts it agrees with a fixed-offset zone (`Etc/GMT`) path for a
representative set of `days` (zero, positive, negative, `+/-maxSafeDays`).
- Asserts it equals `days * MICROS_PER_DAY` directly, so divergence in some
future JDK is caught.
- Asserts `ArithmeticException` on overflow.
### Was this patch authored or co-authored using generative AI tooling?
No
Closes #55893 from LuciferYang/SPARK-daystomicros-utc-fastpath.
Authored-by: YangJie <[email protected]>
Signed-off-by: yangjie01 <[email protected]>
---
.../sql/catalyst/util/SparkDateTimeUtils.scala | 11 +++-
.../sql/catalyst/util/DateTimeUtilsSuite.scala | 26 ++++++++
...ParquetVectorUpdaterBenchmark-jdk21-results.txt | 52 ++++++++--------
...ParquetVectorUpdaterBenchmark-jdk25-results.txt | 58 ++++++++---------
.../ParquetVectorUpdaterBenchmark-results.txt | 72 +++++++++++-----------
5 files changed, 125 insertions(+), 94 deletions(-)
diff --git
a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkDateTimeUtils.scala
b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkDateTimeUtils.scala
index 9ce9d14ed316..9684737a2286 100644
---
a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkDateTimeUtils.scala
+++
b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/SparkDateTimeUtils.scala
@@ -228,11 +228,16 @@ trait SparkDateTimeUtils {
/**
* Converts days since 1970-01-01 at the given zone ID to microseconds since
1970-01-01
- * 00:00:00Z.
+ * 00:00:00Z. When `zoneId eq ZoneOffset.UTC`, takes a direct-multiply fast
path that skips the
+ * `LocalDate`/`ZonedDateTime`/`Instant` chain.
*/
def daysToMicros(days: Int, zoneId: ZoneId): Long = {
- val instant = daysToLocalDate(days).atStartOfDay(zoneId).toInstant
- instantToMicros(instant)
+ if (zoneId eq ZoneOffset.UTC) {
+ Math.multiplyExact(days.toLong, MICROS_PER_DAY)
+ } else {
+ val instant = daysToLocalDate(days).atStartOfDay(zoneId).toInstant
+ instantToMicros(instant)
+ }
}
/**
diff --git
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
index 4aa03d9f8daa..4810ec69bb96 100644
---
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
+++
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
@@ -971,6 +971,32 @@ class DateTimeUtilsSuite extends SparkFunSuite with
Matchers with SQLHelper {
assert(DateTimeUtils.microsToMillis(-157700927876544L) === -157700927877L)
}
+ test("daysToMicros: ZoneOffset.UTC fast path matches the generic zone path")
{
+ // The UTC fast path returns `days * MICROS_PER_DAY` directly; assert it
agrees with the
+ // `LocalDate -> ZonedDateTime -> Instant` path used for any other zone
whose offset is 0
+ // (e.g. `Etc/GMT`). Covers zero, positive, negative, and values bounded
by the largest
+ // `days` for which `days * MICROS_PER_DAY` does not overflow `Long`.
+ val maxSafeDays = (Long.MaxValue / MICROS_PER_DAY).toInt
+ val cases = Seq(0, 1, -1, 365, -365, 16800, -16800, 1_000_000, -1_000_000,
+ maxSafeDays, -maxSafeDays)
+ val gmt = ZoneId.of("Etc/GMT")
+ cases.foreach { d =>
+ assert(daysToMicros(d, ZoneOffset.UTC) === daysToMicros(d, gmt),
+ s"UTC fast path diverged from Etc/GMT path at days=$d")
+ assert(daysToMicros(d, ZoneOffset.UTC) === d.toLong * MICROS_PER_DAY,
+ s"UTC fast path != days * MICROS_PER_DAY at days=$d")
+ }
+
+ // Overflow: any `days` past `maxSafeDays` overflows `Long` and must throw
rather than
+ // silently wrap.
+ intercept[ArithmeticException] {
+ daysToMicros(maxSafeDays + 1, ZoneOffset.UTC)
+ }
+ intercept[ArithmeticException] {
+ daysToMicros(-maxSafeDays - 1, ZoneOffset.UTC)
+ }
+ }
+
test("SPARK-29012: special timestamp values") {
testSpecialDatetimeValues { zoneId =>
val tolerance = TimeUnit.SECONDS.toMicros(30)
diff --git
a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk21-results.txt
b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk21-results.txt
index b120f8d412a3..9e86eacb0e8c 100644
--- a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk21-results.txt
+++ b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk21-results.txt
@@ -2,45 +2,45 @@
Identity Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Identity Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
BooleanUpdater 0 0
0 17004.4 0.1 1.0X
-ByteUpdater (INT32 -> Byte) 0 0
0 3748.2 0.3 0.2X
-ShortUpdater (INT32 -> Short) 1 1
0 1683.0 0.6 0.1X
-IntegerUpdater 0 0
0 10179.2 0.1 0.6X
-LongUpdater 0 0
0 5075.5 0.2 0.3X
-FloatUpdater 0 0
0 10201.9 0.1 0.6X
-DoubleUpdater 0 0
0 5140.6 0.2 0.3X
-BinaryUpdater 15 15
0 71.3 14.0 0.0X
+ByteUpdater (INT32 -> Byte) 0 0
0 3746.5 0.3 0.2X
+ShortUpdater (INT32 -> Short) 1 1
0 1681.2 0.6 0.1X
+IntegerUpdater 0 0
0 10290.1 0.1 0.6X
+LongUpdater 0 0
0 3875.9 0.3 0.2X
+FloatUpdater 0 0
0 10148.5 0.1 0.6X
+DoubleUpdater 0 0
0 5141.3 0.2 0.3X
+BinaryUpdater 15 15
0 70.7 14.1 0.0X
================================================================================================
Type-converting Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Type-converting Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------
-IntegerToLongUpdater 0 0
0 6208.4 0.2 1.0X
-IntegerToDoubleUpdater 0 0
0 6155.9 0.2 1.0X
-FloatToDoubleUpdater 0 0
0 2526.5 0.4 0.4X
-DateToTimestampNTZUpdater 27 28
1 38.6 25.9 0.0X
-DowncastLongUpdater (INT64 -> Decimal(9,2)) 0 0
0 5828.5 0.2 0.9X
+IntegerToLongUpdater 0 0
0 6237.3 0.2 1.0X
+IntegerToDoubleUpdater 0 0
0 6117.3 0.2 1.0X
+FloatToDoubleUpdater 0 0
0 2526.7 0.4 0.4X
+DateToTimestampNTZUpdater 3 3
0 366.1 2.7 0.1X
+DowncastLongUpdater (INT64 -> Decimal(9,2)) 0 0
0 5126.2 0.2 0.8X
================================================================================================
Rebase Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Rebase Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-------------------------------------------------------------------------------------------------------------------------------
-IntegerWithRebaseUpdater (DATE legacy) 0 0
0 3651.5 0.3 1.0X
-LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 0 0
0 2621.2 0.4 0.7X
+IntegerWithRebaseUpdater (DATE legacy) 0 0
0 3640.1 0.3 1.0X
+LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 0 0
0 2281.8 0.4 0.6X
LongAsMicrosUpdater (TIMESTAMP_MILLIS) 2 3
0 420.5 2.4 0.1X
@@ -48,11 +48,11 @@ LongAsMicrosUpdater (TIMESTAMP_MILLIS)
2 3
Unsigned Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Unsigned Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-----------------------------------------------------------------------------------------------------------------------------
-UnsignedIntegerUpdater (UINT32 -> Long) 0 0
0 5879.9 0.2 1.0X
+UnsignedIntegerUpdater (UINT32 -> Long) 0 0
0 5141.0 0.2 1.0X
UnsignedLongUpdater (UINT64 -> Decimal(20,0)) 16 17
0 63.8 15.7 0.0X
@@ -60,25 +60,25 @@ UnsignedLongUpdater (UINT64 -> Decimal(20,0))
16 17
Decimal Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Decimal Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
-IntegerToDecimalUpdater 0 0
0 10144.6 0.1 1.0X
-LongToDecimalUpdater 0 0
0 5061.5 0.2 0.5X
-FixedLenByteArrayToDecimalUpdater 20 21
1 51.3 19.5 0.0X
+IntegerToDecimalUpdater 0 0
0 10288.1 0.1 1.0X
+LongToDecimalUpdater 0 0
0 3872.9 0.3 0.4X
+FixedLenByteArrayToDecimalUpdater 21 21
1 50.2 19.9 0.0X
================================================================================================
FixedLenByteArray Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 21.0.11+10-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
FixedLenByteArray Updaters: Best Time(ms) Avg
Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------------------
-FixedLenByteArrayUpdater (len=16 -> Binary) 20
21 1 51.8 19.3 1.0X
+FixedLenByteArrayUpdater (len=16 -> Binary) 20
21 2 51.8 19.3 1.0X
FixedLenByteArrayAsIntUpdater (len=4 -> Decimal(9,2)) 7
7 0 160.2 6.2 3.1X
-FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 8
8 0 133.2 7.5 2.6X
+FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 8
8 0 133.3 7.5 2.6X
diff --git
a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk25-results.txt
b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk25-results.txt
index 6dfd2fdadc25..aed60eaf5136 100644
--- a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk25-results.txt
+++ b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-jdk25-results.txt
@@ -2,45 +2,45 @@
Identity Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Identity Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
-BooleanUpdater 0 0
0 17160.2 0.1 1.0X
-ByteUpdater (INT32 -> Byte) 0 0
0 3686.1 0.3 0.2X
-ShortUpdater (INT32 -> Short) 1 1
0 1662.8 0.6 0.1X
-IntegerUpdater 0 0
0 10282.0 0.1 0.6X
-LongUpdater 0 0
0 5151.9 0.2 0.3X
-FloatUpdater 0 0
0 10306.3 0.1 0.6X
-DoubleUpdater 0 0
0 5149.1 0.2 0.3X
-BinaryUpdater 15 16
0 67.8 14.8 0.0X
+BooleanUpdater 0 0
0 17126.9 0.1 1.0X
+ByteUpdater (INT32 -> Byte) 0 0
0 3721.3 0.3 0.2X
+ShortUpdater (INT32 -> Short) 1 1
0 1662.6 0.6 0.1X
+IntegerUpdater 0 0
0 10216.0 0.1 0.6X
+LongUpdater 0 0
0 5150.9 0.2 0.3X
+FloatUpdater 0 0
0 10313.5 0.1 0.6X
+DoubleUpdater 0 0
0 5147.6 0.2 0.3X
+BinaryUpdater 16 16
0 66.4 15.1 0.0X
================================================================================================
Type-converting Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Type-converting Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------
-IntegerToLongUpdater 0 0
0 6390.8 0.2 1.0X
-IntegerToDoubleUpdater 0 0
0 6415.4 0.2 1.0X
-FloatToDoubleUpdater 0 0
0 3196.5 0.3 0.5X
-DateToTimestampNTZUpdater 29 29
0 36.6 27.3 0.0X
-DowncastLongUpdater (INT64 -> Decimal(9,2)) 0 0
0 6568.8 0.2 1.0X
+IntegerToLongUpdater 0 0
0 5428.8 0.2 1.0X
+IntegerToDoubleUpdater 0 0
0 5132.3 0.2 0.9X
+FloatToDoubleUpdater 0 0
0 3199.4 0.3 0.6X
+DateToTimestampNTZUpdater 3 3
1 378.3 2.6 0.1X
+DowncastLongUpdater (INT64 -> Decimal(9,2)) 0 0
0 6548.3 0.2 1.2X
================================================================================================
Rebase Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Rebase Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-------------------------------------------------------------------------------------------------------------------------------
-IntegerWithRebaseUpdater (DATE legacy) 0 0
0 3665.9 0.3 1.0X
-LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 0 0
0 2652.9 0.4 0.7X
+IntegerWithRebaseUpdater (DATE legacy) 0 0
0 3097.0 0.3 1.0X
+LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 0 0
0 2286.8 0.4 0.7X
LongAsMicrosUpdater (TIMESTAMP_MILLIS) 3 3
0 371.3 2.7 0.1X
@@ -48,37 +48,37 @@ LongAsMicrosUpdater (TIMESTAMP_MILLIS)
3 3
Unsigned Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Unsigned Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-----------------------------------------------------------------------------------------------------------------------------
-UnsignedIntegerUpdater (UINT32 -> Long) 0 0
0 5111.6 0.2 1.0X
-UnsignedLongUpdater (UINT64 -> Decimal(20,0)) 17 18
0 60.4 16.6 0.0X
+UnsignedIntegerUpdater (UINT32 -> Long) 0 0
0 5119.0 0.2 1.0X
+UnsignedLongUpdater (UINT64 -> Decimal(20,0)) 17 17
0 60.4 16.6 0.0X
================================================================================================
Decimal Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
Decimal Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
-IntegerToDecimalUpdater 0 0
0 10205.8 0.1 1.0X
-LongToDecimalUpdater 0 0
0 5111.4 0.2 0.5X
-FixedLenByteArrayToDecimalUpdater 21 21
2 50.9 19.6 0.0X
+IntegerToDecimalUpdater 0 0
0 7753.9 0.1 1.0X
+LongToDecimalUpdater 0 0
0 3880.7 0.3 0.5X
+FixedLenByteArrayToDecimalUpdater 21 21
0 50.9 19.6 0.0X
================================================================================================
FixedLenByteArray Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1010-azure
+OpenJDK 64-Bit Server VM 25.0.3+9-LTS on Linux 6.17.0-1013-azure
AMD EPYC 7763 64-Core Processor
FixedLenByteArray Updaters: Best Time(ms) Avg
Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------------------
-FixedLenByteArrayUpdater (len=16 -> Binary) 21
22 1 50.4 19.8 1.0X
-FixedLenByteArrayAsIntUpdater (len=4 -> Decimal(9,2)) 7
7 0 152.6 6.6 3.0X
-FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 8
8 0 127.7 7.8 2.5X
+FixedLenByteArrayUpdater (len=16 -> Binary) 21
21 1 50.5 19.8 1.0X
+FixedLenByteArrayAsIntUpdater (len=4 -> Decimal(9,2)) 7
7 0 152.7 6.5 3.0X
+FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 8
8 0 127.8 7.8 2.5X
diff --git a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-results.txt
b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-results.txt
index 5918db9f759b..a0ad4843991b 100644
--- a/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-results.txt
+++ b/sql/core/benchmarks/ParquetVectorUpdaterBenchmark-results.txt
@@ -2,83 +2,83 @@
Identity Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
Identity Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
-BooleanUpdater 0 0
0 14617.4 0.1 1.0X
-ByteUpdater (INT32 -> Byte) 0 0
0 3667.7 0.3 0.3X
-ShortUpdater (INT32 -> Short) 1 1
0 2048.9 0.5 0.1X
-IntegerUpdater 0 0
0 10281.9 0.1 0.7X
-LongUpdater 0 0
0 5138.0 0.2 0.4X
-FloatUpdater 0 0
0 7742.9 0.1 0.5X
-DoubleUpdater 0 0
0 3863.4 0.3 0.3X
-BinaryUpdater 15 15
0 70.2 14.2 0.0X
+BooleanUpdater 0 0
0 14742.5 0.1 1.0X
+ByteUpdater (INT32 -> Byte) 0 0
0 3584.0 0.3 0.2X
+ShortUpdater (INT32 -> Short) 1 1
0 1824.8 0.5 0.1X
+IntegerUpdater 0 0
0 8346.1 0.1 0.6X
+LongUpdater 0 0
0 4103.9 0.2 0.3X
+FloatUpdater 0 0
0 8215.2 0.1 0.6X
+DoubleUpdater 0 0
0 4141.1 0.2 0.3X
+BinaryUpdater 18 18
0 58.9 17.0 0.0X
================================================================================================
Type-converting Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
Type-converting Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------
-IntegerToLongUpdater 1 1
0 1279.7 0.8 1.0X
-IntegerToDoubleUpdater 1 1
0 1544.8 0.6 1.2X
-FloatToDoubleUpdater 1 1
0 1417.9 0.7 1.1X
-DateToTimestampNTZUpdater 36 36
1 29.5 33.9 0.0X
-DowncastLongUpdater (INT64 -> Decimal(9,2)) 1 1
0 1287.3 0.8 1.0X
+IntegerToLongUpdater 1 1
0 1129.8 0.9 1.0X
+IntegerToDoubleUpdater 1 1
0 1365.8 0.7 1.2X
+FloatToDoubleUpdater 1 1
0 1284.3 0.8 1.1X
+DateToTimestampNTZUpdater 3 3
0 357.5 2.8 0.3X
+DowncastLongUpdater (INT64 -> Decimal(9,2)) 1 1
0 1136.5 0.9 1.0X
================================================================================================
Rebase Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
Rebase Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-------------------------------------------------------------------------------------------------------------------------------
-IntegerWithRebaseUpdater (DATE legacy) 0 0
0 2599.8 0.4 1.0X
-LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 1 1
0 2092.2 0.5 0.8X
-LongAsMicrosUpdater (TIMESTAMP_MILLIS) 2 2
0 454.7 2.2 0.2X
+IntegerWithRebaseUpdater (DATE legacy) 0 0
0 2180.9 0.5 1.0X
+LongWithRebaseUpdater (TIMESTAMP_MICROS legacy) 1 1
0 1744.3 0.6 0.8X
+LongAsMicrosUpdater (TIMESTAMP_MILLIS) 2 3
0 421.0 2.4 0.2X
================================================================================================
Unsigned Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
Unsigned Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
-----------------------------------------------------------------------------------------------------------------------------
-UnsignedIntegerUpdater (UINT32 -> Long) 1 1
0 1091.2 0.9 1.0X
-UnsignedLongUpdater (UINT64 -> Decimal(20,0)) 18 18
0 59.1 16.9 0.1X
+UnsignedIntegerUpdater (UINT32 -> Long) 1 1
0 965.9 1.0 1.0X
+UnsignedLongUpdater (UINT64 -> Decimal(20,0)) 18 18
0 58.6 17.1 0.1X
================================================================================================
Decimal Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
Decimal Updaters: Best Time(ms) Avg Time(ms)
Stdev(ms) Rate(M/s) Per Row(ns) Relative
------------------------------------------------------------------------------------------------------------------------
-IntegerToDecimalUpdater 0 0
0 10241.7 0.1 1.0X
-LongToDecimalUpdater 0 0
0 5118.1 0.2 0.5X
-FixedLenByteArrayToDecimalUpdater 21 21
0 51.1 19.6 0.0X
+IntegerToDecimalUpdater 0 0
0 8299.8 0.1 1.0X
+LongToDecimalUpdater 0 0
0 4106.5 0.2 0.5X
+FixedLenByteArrayToDecimalUpdater 24 24
1 43.8 22.8 0.0X
================================================================================================
FixedLenByteArray Updaters
================================================================================================
-OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1010-azure
-AMD EPYC 7763 64-Core Processor
+OpenJDK 64-Bit Server VM 17.0.19+10-LTS on Linux 6.17.0-1013-azure
+AMD EPYC 9V74 80-Core Processor
FixedLenByteArray Updaters: Best Time(ms) Avg
Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative
---------------------------------------------------------------------------------------------------------------------------------------
-FixedLenByteArrayUpdater (len=16 -> Binary) 19
19 0 55.1 18.2 1.0X
-FixedLenByteArrayAsIntUpdater (len=4 -> Decimal(9,2)) 7
7 0 160.2 6.2 2.9X
-FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 9
9 0 123.1 8.1 2.2X
+FixedLenByteArrayUpdater (len=16 -> Binary) 22
23 0 47.0 21.3 1.0X
+FixedLenByteArrayAsIntUpdater (len=4 -> Decimal(9,2)) 6
6 1 166.4 6.0 3.5X
+FixedLenByteArrayAsLongUpdater (len=8 -> Decimal(18,4)) 8
9 1 125.1 8.0 2.7X
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]