From 5c785ecbd13ad271f10f92484f70f86c2637abe6 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:02:54 -0700 Subject: [PATCH 1/7] Add microbenchmark for casting string to numeric --- .../CometCastStringToNumericBenchmark.scala | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala new file mode 100644 index 0000000000..1dc258d54c --- /dev/null +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.spark.sql.benchmark + +import org.apache.spark.sql.internal.SQLConf + +case class CastStringToNumericConfig( + name: String, + query: String, + extraCometConfigs: Map[String, String] = Map.empty) + +/** + * Benchmark to measure performance of Comet cast from String to numeric types. To run this + * benchmark: `SPARK_GENERATE_BENCHMARK_FILES=1 make + * benchmark-org.apache.spark.sql.benchmark.CometCastStringToNumericBenchmark` Results will be + * written to "spark/benchmarks/CometCastStringToNumericBenchmark-**results.txt". + */ +object CometCastStringToNumericBenchmark extends CometBenchmarkBase { + + /** + * Generic method to run a cast benchmark with the given configuration. + */ + def runCastBenchmark(config: CastStringToNumericConfig, values: Int): Unit = { + withTempPath { dir => + withTempTable("parquetV1Table") { + // Generate numeric strings with decimal points: "123.45", "-456.78", etc. + prepareTable( + dir, + spark.sql(s"SELECT CAST((value - 500000) / 100.0 AS STRING) AS c1 FROM $tbl")) + + runExpressionBenchmark(config.name, values, config.query, config.extraCometConfigs) + } + } + } + + // Configuration for all String to numeric cast benchmarks + private val castConfigs = List( + // Boolean + CastStringToNumericConfig( + "Cast String to Boolean (LEGACY)", + "SELECT CAST(c1 AS BOOLEAN) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + CastStringToNumericConfig( + "Cast String to Boolean (ANSI)", + "SELECT CAST(c1 AS BOOLEAN) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "true")), + // Byte + CastStringToNumericConfig( + "Cast String to Byte (LEGACY)", + "SELECT CAST(c1 AS BYTE) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + CastStringToNumericConfig( + "Cast String to Byte (ANSI)", + "SELECT CAST(c1 AS BYTE) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "true")), + // Short + CastStringToNumericConfig( + "Cast String to Short (LEGACY)", + "SELECT CAST(c1 AS SHORT) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + CastStringToNumericConfig( + "Cast String to Short (ANSI)", + "SELECT CAST(c1 AS SHORT) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "true")), + // Integer + CastStringToNumericConfig( + "Cast String to Integer (LEGACY)", + "SELECT CAST(c1 AS INT) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + CastStringToNumericConfig( + "Cast String to Integer (ANSI)", + "SELECT CAST(c1 AS INT) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "true")), + // Long + CastStringToNumericConfig( + "Cast String to Long (LEGACY)", + "SELECT CAST(c1 AS LONG) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + CastStringToNumericConfig( + "Cast String to Long (ANSI)", + "SELECT CAST(c1 AS LONG) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "true")), + // Float (Incompatible - but still useful to benchmark) + CastStringToNumericConfig( + "Cast String to Float (LEGACY)", + "SELECT CAST(c1 AS FLOAT) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + // Double (Incompatible - but still useful to benchmark) + CastStringToNumericConfig( + "Cast String to Double (LEGACY)", + "SELECT CAST(c1 AS DOUBLE) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false")), + // Decimal (Incompatible - but still useful to benchmark) + CastStringToNumericConfig( + "Cast String to Decimal(10,2) (LEGACY)", + "SELECT CAST(c1 AS DECIMAL(10,2)) FROM parquetV1Table", + Map(SQLConf.ANSI_ENABLED.key -> "false"))) + + override def runCometBenchmark(mainArgs: Array[String]): Unit = { + val values = 1024 * 1024 * 10 // 10M rows + + castConfigs.foreach { config => + runBenchmarkWithTable(config.name, values) { v => + runCastBenchmark(config, v) + } + } + } +} From 41ad69ab4f5e661dbb87a9f2056274e74a2344c3 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:11:10 -0700 Subject: [PATCH 2/7] improve --- .../CometCastStringToNumericBenchmark.scala | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index 1dc258d54c..afcef9e506 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -19,19 +19,24 @@ package org.apache.spark.sql.benchmark +import org.apache.spark.sql.catalyst.expressions.Cast import org.apache.spark.sql.internal.SQLConf +import org.apache.comet.CometConf + case class CastStringToNumericConfig( name: String, query: String, extraCometConfigs: Map[String, String] = Map.empty) +// spotless:off /** * Benchmark to measure performance of Comet cast from String to numeric types. To run this - * benchmark: `SPARK_GENERATE_BENCHMARK_FILES=1 make - * benchmark-org.apache.spark.sql.benchmark.CometCastStringToNumericBenchmark` Results will be - * written to "spark/benchmarks/CometCastStringToNumericBenchmark-**results.txt". + * benchmark: + * `SPARK_GENERATE_BENCHMARK_FILES=1 make benchmark-org.apache.spark.sql.benchmark.CometCastStringToNumericBenchmark` + * Results will be written to "spark/benchmarks/CometCastStringToNumericBenchmark-**results.txt". */ +// spotless:on object CometCastStringToNumericBenchmark extends CometBenchmarkBase { /** @@ -41,9 +46,19 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { withTempPath { dir => withTempTable("parquetV1Table") { // Generate numeric strings with decimal points: "123.45", "-456.78", etc. + // Also include some special values: nulls (~2%), NaN (~2%), Infinity (~2%) prepareTable( dir, - spark.sql(s"SELECT CAST((value - 500000) / 100.0 AS STRING) AS c1 FROM $tbl")) + spark.sql(s""" + SELECT CASE + WHEN value % 50 = 0 THEN NULL + WHEN value % 50 = 1 THEN 'NaN' + WHEN value % 50 = 2 THEN 'Infinity' + WHEN value % 50 = 3 THEN '-Infinity' + ELSE CAST((value - 500000) / 100.0 AS STRING) + END AS c1 + FROM $tbl + """)) runExpressionBenchmark(config.name, values, config.query, config.extraCometConfigs) } @@ -97,21 +112,27 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { "Cast String to Long (ANSI)", "SELECT CAST(c1 AS LONG) FROM parquetV1Table", Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Float (Incompatible - but still useful to benchmark) + // Float (Incompatible - requires allowIncompat config) CastStringToNumericConfig( "Cast String to Float (LEGACY)", "SELECT CAST(c1 AS FLOAT) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - // Double (Incompatible - but still useful to benchmark) + Map( + SQLConf.ANSI_ENABLED.key -> "false", + CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")), + // Double (Incompatible - requires allowIncompat config) CastStringToNumericConfig( "Cast String to Double (LEGACY)", "SELECT CAST(c1 AS DOUBLE) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - // Decimal (Incompatible - but still useful to benchmark) + Map( + SQLConf.ANSI_ENABLED.key -> "false", + CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")), + // Decimal (Incompatible - requires allowIncompat config) CastStringToNumericConfig( "Cast String to Decimal(10,2) (LEGACY)", "SELECT CAST(c1 AS DECIMAL(10,2)) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false"))) + Map( + SQLConf.ANSI_ENABLED.key -> "false", + CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true"))) override def runCometBenchmark(mainArgs: Array[String]): Unit = { val values = 1024 * 1024 * 10 // 10M rows From 399a04761238b64acd80c3c8d14548e489cbe29f Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:18:27 -0700 Subject: [PATCH 3/7] simplify --- .../CometCastStringToNumericBenchmark.scala | 80 +++---------------- 1 file changed, 13 insertions(+), 67 deletions(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index afcef9e506..815c303796 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -66,73 +66,19 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { } // Configuration for all String to numeric cast benchmarks - private val castConfigs = List( - // Boolean - CastStringToNumericConfig( - "Cast String to Boolean (LEGACY)", - "SELECT CAST(c1 AS BOOLEAN) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - CastStringToNumericConfig( - "Cast String to Boolean (ANSI)", - "SELECT CAST(c1 AS BOOLEAN) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Byte - CastStringToNumericConfig( - "Cast String to Byte (LEGACY)", - "SELECT CAST(c1 AS BYTE) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - CastStringToNumericConfig( - "Cast String to Byte (ANSI)", - "SELECT CAST(c1 AS BYTE) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Short - CastStringToNumericConfig( - "Cast String to Short (LEGACY)", - "SELECT CAST(c1 AS SHORT) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - CastStringToNumericConfig( - "Cast String to Short (ANSI)", - "SELECT CAST(c1 AS SHORT) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Integer - CastStringToNumericConfig( - "Cast String to Integer (LEGACY)", - "SELECT CAST(c1 AS INT) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - CastStringToNumericConfig( - "Cast String to Integer (ANSI)", - "SELECT CAST(c1 AS INT) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Long - CastStringToNumericConfig( - "Cast String to Long (LEGACY)", - "SELECT CAST(c1 AS LONG) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "false")), - CastStringToNumericConfig( - "Cast String to Long (ANSI)", - "SELECT CAST(c1 AS LONG) FROM parquetV1Table", - Map(SQLConf.ANSI_ENABLED.key -> "true")), - // Float (Incompatible - requires allowIncompat config) - CastStringToNumericConfig( - "Cast String to Float (LEGACY)", - "SELECT CAST(c1 AS FLOAT) FROM parquetV1Table", - Map( - SQLConf.ANSI_ENABLED.key -> "false", - CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")), - // Double (Incompatible - requires allowIncompat config) - CastStringToNumericConfig( - "Cast String to Double (LEGACY)", - "SELECT CAST(c1 AS DOUBLE) FROM parquetV1Table", - Map( - SQLConf.ANSI_ENABLED.key -> "false", - CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")), - // Decimal (Incompatible - requires allowIncompat config) - CastStringToNumericConfig( - "Cast String to Decimal(10,2) (LEGACY)", - "SELECT CAST(c1 AS DECIMAL(10,2)) FROM parquetV1Table", - Map( - SQLConf.ANSI_ENABLED.key -> "false", - CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true"))) + private val castFunctions = Seq("CAST", "TRY_CAST") + private val targetTypes = + Seq("BOOLEAN", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "DECIMAL(10,2)") + + private val castConfigs = for { + castFunc <- castFunctions + targetType <- targetTypes + } yield CastStringToNumericConfig( + s"$castFunc String to $targetType", + s"SELECT $castFunc(c1 AS $targetType) FROM parquetV1Table", + Map( + SQLConf.ANSI_ENABLED.key -> "false", + CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")) override def runCometBenchmark(mainArgs: Array[String]): Unit = { val values = 1024 * 1024 * 10 // 10M rows From 480abcfecd5155c86cbc2387010966fc2dc728b4 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:28:59 -0700 Subject: [PATCH 4/7] Save --- .../spark/sql/benchmark/CometCastStringToNumericBenchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index 815c303796..e2b8bdf327 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -81,7 +81,7 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { CometConf.getExprAllowIncompatConfigKey(classOf[Cast]) -> "true")) override def runCometBenchmark(mainArgs: Array[String]): Unit = { - val values = 1024 * 1024 * 10 // 10M rows + val values = 1024 * 1024 // 1M rows castConfigs.foreach { config => runBenchmarkWithTable(config.name, values) { v => From ef5baaad11eb14d5f31ed685730f89e4de62d711 Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:32:51 -0700 Subject: [PATCH 5/7] generate data once --- .../CometCastStringToNumericBenchmark.scala | 53 +++++++++---------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index e2b8bdf327..01d7ea9f2e 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -39,32 +39,6 @@ case class CastStringToNumericConfig( // spotless:on object CometCastStringToNumericBenchmark extends CometBenchmarkBase { - /** - * Generic method to run a cast benchmark with the given configuration. - */ - def runCastBenchmark(config: CastStringToNumericConfig, values: Int): Unit = { - withTempPath { dir => - withTempTable("parquetV1Table") { - // Generate numeric strings with decimal points: "123.45", "-456.78", etc. - // Also include some special values: nulls (~2%), NaN (~2%), Infinity (~2%) - prepareTable( - dir, - spark.sql(s""" - SELECT CASE - WHEN value % 50 = 0 THEN NULL - WHEN value % 50 = 1 THEN 'NaN' - WHEN value % 50 = 2 THEN 'Infinity' - WHEN value % 50 = 3 THEN '-Infinity' - ELSE CAST((value - 500000) / 100.0 AS STRING) - END AS c1 - FROM $tbl - """)) - - runExpressionBenchmark(config.name, values, config.query, config.extraCometConfigs) - } - } - } - // Configuration for all String to numeric cast benchmarks private val castFunctions = Seq("CAST", "TRY_CAST") private val targetTypes = @@ -83,9 +57,30 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { override def runCometBenchmark(mainArgs: Array[String]): Unit = { val values = 1024 * 1024 // 1M rows - castConfigs.foreach { config => - runBenchmarkWithTable(config.name, values) { v => - runCastBenchmark(config, v) + // Generate input data once for all benchmarks + runBenchmarkWithTable("String to numeric casts", values) { v => + withTempPath { dir => + withTempTable("parquetV1Table") { + // Generate numeric strings with decimal points: "123.45", "-456.78", etc. + // Also include some special values: nulls (~2%), NaN (~2%), Infinity (~2%) + prepareTable( + dir, + spark.sql(s""" + SELECT CASE + WHEN value % 50 = 0 THEN NULL + WHEN value % 50 = 1 THEN 'NaN' + WHEN value % 50 = 2 THEN 'Infinity' + WHEN value % 50 = 3 THEN '-Infinity' + ELSE CAST((value - 500000) / 100.0 AS STRING) + END AS c1 + FROM $tbl + """)) + + // Run all benchmarks on the same input data + castConfigs.foreach { config => + runExpressionBenchmark(config.name, v, config.query, config.extraCometConfigs) + } + } } } } From 01b077282ab95b52351eb556806f66c335b4023c Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Tue, 23 Dec 2025 13:53:42 -0700 Subject: [PATCH 6/7] improve --- .../sql/benchmark/CometCastStringToNumericBenchmark.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index 01d7ea9f2e..403e72f154 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -39,7 +39,6 @@ case class CastStringToNumericConfig( // spotless:on object CometCastStringToNumericBenchmark extends CometBenchmarkBase { - // Configuration for all String to numeric cast benchmarks private val castFunctions = Seq("CAST", "TRY_CAST") private val targetTypes = Seq("BOOLEAN", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "DECIMAL(10,2)") @@ -61,7 +60,7 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { runBenchmarkWithTable("String to numeric casts", values) { v => withTempPath { dir => withTempTable("parquetV1Table") { - // Generate numeric strings with decimal points: "123.45", "-456.78", etc. + // Generate numeric strings with both integer and decimal values // Also include some special values: nulls (~2%), NaN (~2%), Infinity (~2%) prepareTable( dir, @@ -71,12 +70,13 @@ object CometCastStringToNumericBenchmark extends CometBenchmarkBase { WHEN value % 50 = 1 THEN 'NaN' WHEN value % 50 = 2 THEN 'Infinity' WHEN value % 50 = 3 THEN '-Infinity' + WHEN value % 50 < 10 THEN CAST(value % 99 AS STRING) + WHEN value % 50 < 30 THEN CAST(value % 999999 AS STRING) ELSE CAST((value - 500000) / 100.0 AS STRING) END AS c1 FROM $tbl """)) - // Run all benchmarks on the same input data castConfigs.foreach { config => runExpressionBenchmark(config.name, v, config.query, config.extraCometConfigs) } From 113562f45c05037809a81dbc88c7060975c0d8fd Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Fri, 26 Dec 2025 09:41:25 -0700 Subject: [PATCH 7/7] address feedback --- .../CometCastStringToNumericBenchmark.scala | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala index 403e72f154..7f210fc730 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometCastStringToNumericBenchmark.scala @@ -29,19 +29,27 @@ case class CastStringToNumericConfig( query: String, extraCometConfigs: Map[String, String] = Map.empty) -// spotless:off /** * Benchmark to measure performance of Comet cast from String to numeric types. To run this * benchmark: - * `SPARK_GENERATE_BENCHMARK_FILES=1 make benchmark-org.apache.spark.sql.benchmark.CometCastStringToNumericBenchmark` - * Results will be written to "spark/benchmarks/CometCastStringToNumericBenchmark-**results.txt". + * {{{ + * SPARK_GENERATE_BENCHMARK_FILES=1 make benchmark-org.apache.spark.sql.benchmark.CometCastStringToNumericBenchmark + * }}} */ -// spotless:on object CometCastStringToNumericBenchmark extends CometBenchmarkBase { private val castFunctions = Seq("CAST", "TRY_CAST") private val targetTypes = - Seq("BOOLEAN", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "DECIMAL(10,2)") + Seq( + "BOOLEAN", + "BYTE", + "SHORT", + "INT", + "LONG", + "FLOAT", + "DOUBLE", + "DECIMAL(10,2)", + "DECIMAL(38,19)") private val castConfigs = for { castFunc <- castFunctions