1 TB TPC-DS benchmark - TabbyDB 4.1.3-tabbydb.2 vs Apache Spark 4.1.3
========================================================================

Results
-------
Hive Parquet     stock  7,884.7s  TabbyDB  6,253.7s  20.7% less total time  geo-mean speedup 1.49x  (88/103 queries faster)
Iceberg Parquet  stock  9,034.4s  TabbyDB  7,066.7s  21.8% less total time  geo-mean speedup 1.40x  (85/103 queries faster)

Setup
-----
Cloud / region:         Google Cloud, us-west4-a
Driver node:            1 x e2-highmem-4 (4 vCPU, 32 GB) - Spark master + driver (24 GB heap)
Worker nodes:           2 x n2-custom-14-114688 (14 vCPU, 112 GB RAM), 2 x 375 GB local NVMe SSD each for shuffle/spill
Executors:              4 executors (2 per worker) x 7 cores x 40 GB heap (+1 GB overhead) = 28 cores, 160 GB
OS / JVM:               Ubuntu 24.04 LTS (amd64), OpenJDK 21
Engines:                Apache Spark 4.1.3 (stock)  vs  TabbyDB 4.1.3-tabbydb.2
Iceberg:                Stock: iceberg-spark-runtime-4.1_2.13-1.11.0  |  TabbyDB: iceberg-tabbydb-runtime-4.1.3_2.13-1.11.0-tabbydb.2
Data:                   TPC-DS scale factor 1000 (1 TB), Parquet on Google Cloud Storage, non-partitioned, date-sorted on locally written partition; DECIMAL generated as DOUBLE
Table formats:          Hive external tables (with ANALYZE statistics) and Iceberg tables over the same data
Workload:               spark-sql-perf, TPC-DS v2.4 queries: 103 queries incl. ss_max (q84 excluded); 1 iteration; OS page caches dropped on workers before each run
Common Spark settings:  autoBroadcastJoinThreshold=100MB, shuffle.partitions=448, preferSortMergeJoin=false, maxShuffledHashJoinLocalMapThreshold=10MB
TabbyDB-only settings:  See tabbydb-spark-defaults.conf (e.g. autoBroadcastJoinThresholdInnerJoin=125MB, BHJ key pushdown flags)
Timing:                 Per-query time = compile (parse/analyze/optimize/plan) + execution, as reported by spark-sql-perf

Correctness: on both formats 93 queries MATCH, 8 MATCH(unordered) (ORDER BY ties), q65/q67 DIFF
(they also differ between stock Spark on Iceberg and stock Spark on Hive: ties + DOUBLE rounding).
Row counts match for all 103 queries.

Files
-----
tpcds-1tb-gcp-hive.csv / -iceberg.csv  per query: stock vs TabbyDB seconds, improvement %, speedup,
                                       result row counts and result check. Last row = TOTAL.
tpcds-1tb-gcp-summary.csv              one line per engine/format: compile, execution, total seconds.
tpcds-1tb-gcp-per-query.csv            every engine/format/query with compile_s, exec_s, total_s.
tpcds-1tb-gcp-result-check.csv         per query, each run's results vs stock Spark on Hive.
tpcds-1tb-gcp-*-data.pdf               printable report: summary, setup and per-query table.
benchmark-1tb-gcp-*.png                per-query charts.
stock-spark-defaults.conf              effective Spark settings for stock Spark.
tabbydb-spark-defaults.conf            effective Spark settings for TabbyDB (common + TabbyDB-only).
spark-env.sh                           node environment (both engines).
