@@ -465,4 +465,81 @@ class VeloxIcebergSuite extends IcebergSuite {
465465 )
466466 }
467467 }
468+ test(" iceberg show stats has non-empty min max for store sales table" ) {
469+ withTable(" store_sales_10_rows" ) {
470+ spark.sql("""
471+ |CREATE TABLE store_sales_10_rows (
472+ | ss_sold_date_sk INT,
473+ | ss_sold_time_sk INT,
474+ | ss_item_sk INT,
475+ | ss_customer_sk INT,
476+ | ss_cdemo_sk INT,
477+ | ss_hdemo_sk INT,
478+ | ss_addr_sk INT,
479+ | ss_store_sk INT,
480+ | ss_promo_sk INT,
481+ | ss_ticket_number BIGINT,
482+ | ss_quantity INT,
483+ | ss_wholesale_cost DECIMAL(7,2),
484+ | ss_list_price DECIMAL(7,2),
485+ | ss_sales_price DECIMAL(7,2),
486+ | ss_ext_discount_amt DECIMAL(7,2),
487+ | ss_ext_sales_price DECIMAL(7,2),
488+ | ss_ext_wholesale_cost DECIMAL(7,2),
489+ | ss_ext_list_price DECIMAL(7,2),
490+ | ss_ext_tax DECIMAL(7,2),
491+ | ss_coupon_amt DECIMAL(7,2),
492+ | ss_net_paid DECIMAL(7,2),
493+ | ss_net_paid_inc_tax DECIMAL(7,2),
494+ | ss_net_profit DECIMAL(7,2)
495+ |) USING iceberg
496+ |""" .stripMargin)
497+
498+ spark.sql(
499+ """
500+ |INSERT INTO store_sales_10_rows VALUES
501+ |(2450899, null, 174781, null, null, 5105, 712262, null, null, 875206344, null, 75.64, 105.13, null, 0.00, null, 3328.16, 4625.72, null, 0.00, null, null, null),
502+ |(2450899, 45381, 240260, 63498438, 1296795, 5105, 712262, 542, 1925, 875206344, 13, 5.12, 7.27, 2.18, 0.00, 28.34, 66.56, 94.51, 1.98, 0.00, 28.34, 30.32, -38.22),
503+ |(2450899, 45381, 360506, 63498438, 1296795, 5105, 712262, 542, 332, 875206344, 69, 36.45, 70.34, 16.17, 0.00, 1115.73, 2515.05, 4853.46, 22.31, 0.00, 1115.73, 1138.04, -1399.32),
504+ |(2450899, 45381, 197360, 63498438, 1296795, 5105, 712262, 542, 1486, 875206344, 50, 92.87, 167.16, 58.50, 0.00, 2925.00, 4643.50, 8358.00, 204.75, 0.00, 2925.00, 3129.75, -1718.50),
505+ |(2450899, 45381, 58255, 63498438, 1296795, 5105, 712262, 542, 359, 875206344, 100, 85.99, 105.76, 47.59, 523.49, 4759.00, 8599.00, 10576.00, 296.48, 523.49, 4235.51, 4531.99, -4363.49),
506+ |(2450899, 45381, 219500, 63498438, 1296795, 5105, 712262, 542, 8, 875206344, 77, 80.61, 121.72, 26.77, 2020.06, 2061.29, 6206.97, 9372.44, 1.64, 2020.06, 41.23, 42.87, -6165.74),
507+ |(2450899, 45381, 60157, 63498438, 1296795, 5105, 712262, 542, 484, 875206344, 9, 44.58, 62.85, 50.28, 0.00, 452.52, 401.22, 565.65, 27.15, 0.00, 452.52, 479.67, 51.30),
508+ |(2450899, 45381, 132362, 63498438, 1296795, 5105, 712262, 542, 1575, 875206344, 86, 30.79, 31.71, 25.68, 0.00, 2208.48, 2647.94, 2727.06, 22.08, 0.00, 2208.48, 2230.56, -439.46),
509+ |(2450899, 45381, 41590, 63498438, 1296795, 5105, 712262, 542, 441, 875206344, 40, 79.99, 137.58, 12.38, 0.00, 495.20, 3199.60, 5503.20, 9.90, 0.00, 495.20, 505.10, -2704.40)
510+ |""" .stripMargin)
511+
512+ spark.sql(" ANALYZE store_sales_10_rows" )
513+
514+ withSQLConf(" spark.sql.statistics.ignoreStatsCalculatorFailures" -> " false" ) {
515+ val stats = spark.sql(" SHOW STATS FOR store_sales_10_rows" )
516+
517+ val statsByColumn =
518+ stats.collect().map(row => row.getAs[String ](" column_name" ) -> row).toMap
519+
520+ Seq (
521+ " ss_sold_date_sk" ,
522+ " ss_item_sk" ,
523+ " ss_ticket_number" ,
524+ " ss_quantity" ,
525+ " ss_wholesale_cost" ,
526+ " ss_list_price" ,
527+ " ss_sales_price" ,
528+ " ss_ext_sales_price" ,
529+ " ss_net_profit"
530+ ).foreach {
531+ colName =>
532+ val row = statsByColumn(colName)
533+
534+ assert(
535+ Option (row.getAs[Any ](" min" )).exists(_.toString.nonEmpty),
536+ s " Expected non-empty min for $colName in SHOW STATS output: $row" )
537+
538+ assert(
539+ Option (row.getAs[Any ](" max" )).exists(_.toString.nonEmpty),
540+ s " Expected non-empty max for $colName in SHOW STATS output: $row" )
541+ }
542+ }
543+ }
544+ }
468545}
0 commit comments