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 9ce9d14ed3161..9684737a22865 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 4aa03d9f8daa0..4810ec69bb96e 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 b120f8d412a35..9e86eacb0e8c7 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 6dfd2fdadc25e..aed60eaf5136e 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 5918db9f759bb..a0ad4843991b1 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