benchbox 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- benchbox/__init__.py +1 -1
- benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query72.tpl +1 -1
- benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/ansi.tpl → templates/query_templates/sqlserver.tpl} +1 -1
- benchbox/_binaries/tpc-ds/templates/query_variants/README +6 -0
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query10.tpl → templates/query_variants/query10a.tpl} +13 -14
- benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/query14.tpl → templates/query_variants/query14a.tpl} +30 -26
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query18.tpl → templates/query_variants/query18a.tpl} +40 -19
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query22.tpl → templates/query_variants/query22a.tpl} +31 -9
- benchbox/_binaries/tpc-ds/{darwin-x86_64/query_templates/query27.tpl → templates/query_variants/query27a.tpl} +23 -10
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query35.tpl → templates/query_variants/query35a.tpl} +9 -8
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query36.tpl → templates/query_variants/query36a.tpl} +24 -12
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query51.tpl → templates/query_variants/query51a.tpl} +37 -20
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query5.tpl → templates/query_variants/query5a.tpl} +15 -10
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query67.tpl → templates/query_variants/query67a.tpl} +46 -18
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query70.tpl → templates/query_variants/query70a.tpl} +31 -27
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query77.tpl → templates/query_variants/query77a.tpl} +22 -15
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query80.tpl → templates/query_variants/query80a.tpl} +22 -8
- benchbox/_binaries/tpc-ds/{linux-arm64/query_templates/query86.tpl → templates/query_variants/query86a.tpl} +22 -13
- benchbox/_binaries/tpc-h/templates/dists.dss +836 -0
- benchbox/_binaries/tpc-h/templates/queries/1.sql +28 -0
- benchbox/_binaries/tpc-h/templates/queries/10.sql +38 -0
- benchbox/_binaries/tpc-h/templates/queries/11.sql +34 -0
- benchbox/_binaries/tpc-h/templates/queries/12.sql +35 -0
- benchbox/_binaries/tpc-h/templates/queries/13.sql +27 -0
- benchbox/_binaries/tpc-h/templates/queries/14.sql +20 -0
- benchbox/_binaries/tpc-h/templates/queries/15.sql +40 -0
- benchbox/_binaries/tpc-h/templates/queries/16.sql +37 -0
- benchbox/_binaries/tpc-h/templates/queries/17.sql +24 -0
- benchbox/_binaries/tpc-h/templates/queries/18.sql +39 -0
- benchbox/_binaries/tpc-h/templates/queries/19.sql +42 -0
- benchbox/_binaries/tpc-h/templates/queries/2.sql +50 -0
- benchbox/_binaries/tpc-h/templates/queries/20.sql +44 -0
- benchbox/_binaries/tpc-h/templates/queries/21.sql +46 -0
- benchbox/_binaries/tpc-h/templates/queries/22.sql +44 -0
- benchbox/_binaries/tpc-h/templates/queries/3.sql +29 -0
- benchbox/_binaries/tpc-h/templates/queries/4.sql +28 -0
- benchbox/_binaries/tpc-h/templates/queries/5.sql +31 -0
- benchbox/_binaries/tpc-h/templates/queries/6.sql +16 -0
- benchbox/_binaries/tpc-h/templates/queries/7.sql +46 -0
- benchbox/_binaries/tpc-h/templates/queries/8.sql +44 -0
- benchbox/_binaries/tpc-h/templates/queries/9.sql +39 -0
- benchbox/_binaries/tpc-h/templates/variants/12a.sql +27 -0
- benchbox/_binaries/tpc-h/templates/variants/13a.sql +30 -0
- benchbox/_binaries/tpc-h/templates/variants/14a.sql +18 -0
- benchbox/_binaries/tpc-h/templates/variants/15a.sql +39 -0
- benchbox/_binaries/tpc-h/templates/variants/8a.sql +77 -0
- benchbox/base.py +88 -121
- benchbox/cli/benchmarks.py +3 -3
- benchbox/cli/commands/calculate_qphh.py +55 -14
- benchbox/cli/commands/checks.py +1 -4
- benchbox/cli/commands/convert.py +8 -3
- benchbox/cli/commands/metrics.py +55 -14
- benchbox/cli/commands/results.py +131 -3
- benchbox/cli/commands/run.py +157 -22
- benchbox/cli/commands/visualize.py +3 -3
- benchbox/cli/composite_params.py +1 -1
- benchbox/cli/config.py +13 -3
- benchbox/cli/database.py +3 -3
- benchbox/cli/dryrun.py +30 -4
- benchbox/cli/exceptions.py +2 -1
- benchbox/cli/execution_pipeline.py +2 -1
- benchbox/cli/orchestrator.py +25 -71
- benchbox/cli/tuning.py +1 -1
- benchbox/core/ai_primitives/benchmark.py +53 -0
- benchbox/core/ai_primitives/dataframe_operations.py +1217 -0
- benchbox/core/base_benchmark.py +90 -68
- benchbox/core/coffeeshop/queries.py +1 -1
- benchbox/core/coffeeshop/schema.py +1 -1
- benchbox/core/comparison/plotter.py +5 -4
- benchbox/core/dataframe/__init__.py +26 -0
- benchbox/core/dataframe/benchmark_suite.py +5 -4
- benchbox/core/dataframe/context.py +45 -0
- benchbox/core/dataframe/data_loader.py +180 -79
- benchbox/core/dataframe/maintenance_interface.py +866 -0
- benchbox/core/dryrun.py +152 -22
- benchbox/core/expected_results/registry.py +22 -5
- benchbox/core/manifest/io.py +4 -3
- benchbox/core/metadata_primitives/__init__.py +31 -0
- benchbox/core/metadata_primitives/benchmark.py +337 -0
- benchbox/core/metadata_primitives/dataframe_operations.py +1824 -0
- benchbox/core/platform_registry.py +134 -45
- benchbox/core/read_primitives/benchmark.py +56 -4
- benchbox/core/read_primitives/dataframe_queries.py +6547 -0
- benchbox/core/results/__init__.py +47 -6
- benchbox/core/results/builder.py +909 -0
- benchbox/core/results/database.py +5 -5
- benchbox/core/results/exporter.py +58 -96
- benchbox/core/results/filenames.py +102 -0
- benchbox/core/results/loader.py +10 -9
- benchbox/core/results/metrics.py +211 -0
- benchbox/core/results/models.py +3 -1
- benchbox/core/results/normalizer.py +346 -0
- benchbox/core/results/platform_info.py +235 -0
- benchbox/core/results/query_normalizer.py +200 -0
- benchbox/core/results/schema.py +368 -69
- benchbox/core/runner/conversion.py +2 -0
- benchbox/core/runner/dataframe_runner.py +135 -131
- benchbox/core/runner/runner.py +111 -18
- benchbox/core/schemas.py +145 -3
- benchbox/core/ssb/generator.py +14 -2
- benchbox/core/tpc_compliance.py +4 -4
- benchbox/core/tpc_metrics.py +9 -4
- benchbox/core/tpcdi/generator/manifest.py +15 -2
- benchbox/core/tpcds/benchmark/runner.py +3 -7
- benchbox/core/tpcds/c_tools.py +34 -28
- benchbox/core/tpcds/dataframe_queries/queries.py +44 -21
- benchbox/core/tpcds/generator/filesystem.py +23 -11
- benchbox/core/tpcds/generator/manager.py +3 -2
- benchbox/core/tpcds/maintenance_test.py +281 -0
- benchbox/core/tpcds/power_test.py +21 -11
- benchbox/core/tpcds/throughput_test.py +27 -9
- benchbox/core/tpcds_obt/etl/transformer.py +24 -5
- benchbox/core/tpch/dataframe_queries.py +46 -43
- benchbox/core/tpch/generator.py +21 -8
- benchbox/core/tpch/maintenance_test.py +87 -0
- benchbox/core/tpch/power_test.py +21 -5
- benchbox/core/tpch/queries.py +2 -7
- benchbox/core/tpch/streams.py +3 -19
- benchbox/core/transaction_primitives/benchmark.py +99 -0
- benchbox/core/transaction_primitives/dataframe_operations.py +1294 -0
- benchbox/core/transaction_primitives/generator.py +11 -4
- benchbox/core/visualization/__init__.py +2 -2
- benchbox/core/visualization/charts.py +4 -4
- benchbox/core/visualization/dependencies.py +1 -12
- benchbox/core/visualization/exporters.py +15 -26
- benchbox/core/visualization/result_plotter.py +90 -49
- benchbox/core/visualization/templates.py +6 -6
- benchbox/core/write_primitives/__init__.py +13 -0
- benchbox/core/write_primitives/benchmark.py +66 -0
- benchbox/core/write_primitives/dataframe_operations.py +912 -0
- benchbox/core/write_primitives/generator.py +11 -4
- benchbox/mcp/__init__.py +5 -1
- benchbox/mcp/errors.py +29 -0
- benchbox/mcp/resources/registry.py +12 -7
- benchbox/mcp/schemas.py +62 -0
- benchbox/mcp/server.py +17 -14
- benchbox/mcp/tools/__init__.py +3 -0
- benchbox/mcp/tools/analytics.py +550 -582
- benchbox/mcp/tools/benchmark.py +603 -611
- benchbox/mcp/tools/discovery.py +156 -205
- benchbox/mcp/tools/results.py +332 -533
- benchbox/mcp/tools/visualization.py +449 -0
- benchbox/platforms/__init__.py +740 -622
- benchbox/platforms/adapter_factory.py +6 -6
- benchbox/platforms/azure_synapse.py +3 -7
- benchbox/platforms/base/adapter.py +189 -49
- benchbox/platforms/base/cloud_spark/config.py +8 -0
- benchbox/platforms/base/cloud_spark/mixins.py +96 -0
- benchbox/platforms/base/cloud_spark/session.py +4 -2
- benchbox/platforms/base/cloud_spark/staging.py +15 -7
- benchbox/platforms/base/data_loading.py +315 -1
- benchbox/platforms/base/format_capabilities.py +37 -2
- benchbox/platforms/base/utils.py +6 -4
- benchbox/platforms/bigquery.py +5 -6
- benchbox/platforms/clickhouse_cloud.py +263 -0
- benchbox/platforms/databricks/adapter.py +16 -15
- benchbox/platforms/databricks/dataframe_adapter.py +4 -1
- benchbox/platforms/dataframe/__init__.py +31 -0
- benchbox/platforms/dataframe/benchmark_mixin.py +779 -0
- benchbox/platforms/dataframe/cudf_df.py +3 -3
- benchbox/platforms/dataframe/dask_df.py +3 -3
- benchbox/platforms/dataframe/datafusion_df.py +152 -15
- benchbox/platforms/dataframe/delta_lake_maintenance.py +341 -0
- benchbox/platforms/dataframe/ducklake_maintenance.py +402 -0
- benchbox/platforms/dataframe/expression_family.py +47 -8
- benchbox/platforms/dataframe/hudi_maintenance.py +437 -0
- benchbox/platforms/dataframe/iceberg_maintenance.py +605 -0
- benchbox/platforms/dataframe/modin_df.py +3 -3
- benchbox/platforms/dataframe/pandas_df.py +3 -3
- benchbox/platforms/dataframe/pandas_family.py +59 -8
- benchbox/platforms/dataframe/platform_checker.py +16 -49
- benchbox/platforms/dataframe/polars_df.py +14 -12
- benchbox/platforms/dataframe/polars_maintenance.py +630 -0
- benchbox/platforms/dataframe/pyspark_df.py +15 -0
- benchbox/platforms/dataframe/pyspark_maintenance.py +613 -0
- benchbox/platforms/datafusion.py +5 -6
- benchbox/platforms/duckdb.py +2 -1
- benchbox/platforms/fabric_warehouse.py +15 -15
- benchbox/platforms/firebolt.py +3 -2
- benchbox/platforms/influxdb/adapter.py +7 -3
- benchbox/platforms/motherduck.py +3 -2
- benchbox/platforms/onehouse/__init__.py +39 -0
- benchbox/platforms/onehouse/onehouse_client.py +509 -0
- benchbox/platforms/onehouse/quanton_adapter.py +646 -0
- benchbox/platforms/postgresql.py +5 -9
- benchbox/platforms/presto.py +2 -2
- benchbox/platforms/pyspark/session.py +3 -3
- benchbox/platforms/pyspark/sql_adapter.py +2 -3
- benchbox/platforms/redshift.py +7 -7
- benchbox/platforms/snowflake.py +4 -4
- benchbox/platforms/snowpark_connect.py +2 -1
- benchbox/platforms/trino.py +2 -2
- benchbox/release/__init__.py +17 -0
- benchbox/release/content_validation.py +745 -0
- benchbox/release/workflow.py +17 -0
- benchbox/utils/VERSION_MANAGEMENT.md +1 -1
- benchbox/utils/cloud_storage.py +7 -5
- benchbox/utils/compression.py +8 -8
- benchbox/utils/compression_mixin.py +2 -1
- benchbox/utils/data_validation.py +23 -14
- benchbox/utils/dependencies.py +47 -7
- benchbox/utils/file_format.py +407 -0
- benchbox/utils/format_converters/__init__.py +5 -1
- benchbox/utils/format_converters/ducklake_converter.py +227 -0
- benchbox/utils/format_converters/vortex_converter.py +168 -0
- benchbox/utils/tpc_compilation.py +43 -0
- benchbox/utils/version.py +14 -2
- {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/METADATA +15 -15
- benchbox-0.1.1.dist-info/RECORD +839 -0
- {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/WHEEL +1 -1
- benchbox/_binaries/tpc-ds/darwin-arm64/query_templates/sqlserver.tpl +0 -37
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/README +0 -4
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/db2.tpl +0 -38
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/netezza.tpl +0 -38
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/oracle.tpl +0 -38
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query1.tpl +0 -62
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query10.tpl +0 -98
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query11.tpl +0 -119
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query12.tpl +0 -72
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query13.tpl +0 -89
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query15.tpl +0 -56
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query16.tpl +0 -76
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query17.tpl +0 -80
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query18.tpl +0 -73
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query19.tpl +0 -64
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query2.tpl +0 -94
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query20.tpl +0 -67
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query21.tpl +0 -65
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query22.tpl +0 -54
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query23.tpl +0 -144
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query24.tpl +0 -147
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query25.tpl +0 -84
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query26.tpl +0 -61
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query28.tpl +0 -90
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query29.tpl +0 -85
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query3.tpl +0 -58
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query30.tpl +0 -66
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query31.tpl +0 -88
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query32.tpl +0 -65
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query33.tpl +0 -113
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query34.tpl +0 -77
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query35.tpl +0 -98
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query36.tpl +0 -74
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query37.tpl +0 -57
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query38.tpl +0 -58
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query39.tpl +0 -93
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query4.tpl +0 -154
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query40.tpl +0 -63
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query41.tpl +0 -90
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query42.tpl +0 -64
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query43.tpl +0 -55
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query44.tpl +0 -72
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query45.tpl +0 -56
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query46.tpl +0 -78
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query47.tpl +0 -89
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query48.tpl +0 -104
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query49.tpl +0 -164
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query5.tpl +0 -165
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query50.tpl +0 -96
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query51.tpl +0 -80
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query52.tpl +0 -59
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query53.tpl +0 -64
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query54.tpl +0 -95
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query55.tpl +0 -52
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query56.tpl +0 -108
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query57.tpl +0 -87
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query58.tpl +0 -101
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query59.tpl +0 -79
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query6.tpl +0 -62
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query60.tpl +0 -115
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query61.tpl +0 -83
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query62.tpl +0 -71
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query63.tpl +0 -64
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query64.tpl +0 -157
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query65.tpl +0 -62
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query66.tpl +0 -261
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query67.tpl +0 -81
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query68.tpl +0 -82
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query69.tpl +0 -85
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query7.tpl +0 -60
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query70.tpl +0 -73
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query71.tpl +0 -74
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query72.tpl +0 -67
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query73.tpl +0 -69
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query74.tpl +0 -99
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query75.tpl +0 -107
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query76.tpl +0 -64
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query77.tpl +0 -145
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query78.tpl +0 -94
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query79.tpl +0 -60
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query8.tpl +0 -144
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query80.tpl +0 -131
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query81.tpl +0 -68
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query82.tpl +0 -56
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query83.tpl +0 -104
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query84.tpl +0 -58
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query85.tpl +0 -121
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query86.tpl +0 -60
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query87.tpl +0 -56
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query88.tpl +0 -128
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query89.tpl +0 -75
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query9.tpl +0 -88
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query90.tpl +0 -58
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query91.tpl +0 -68
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query92.tpl +0 -68
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query93.tpl +0 -53
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query94.tpl +0 -67
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query95.tpl +0 -71
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query96.tpl +0 -52
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query97.tpl +0 -62
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query98.tpl +0 -70
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/query99.tpl +0 -69
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/sqlserver.tpl +0 -37
- benchbox/_binaries/tpc-ds/darwin-x86_64/query_templates/templates.lst +0 -99
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/README +0 -4
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/ansi.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/db2.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/netezza.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/oracle.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query1.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query11.tpl +0 -119
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query12.tpl +0 -72
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query13.tpl +0 -89
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query14.tpl +0 -247
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query15.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query16.tpl +0 -76
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query17.tpl +0 -80
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query19.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query2.tpl +0 -94
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query20.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query21.tpl +0 -65
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query23.tpl +0 -144
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query24.tpl +0 -147
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query25.tpl +0 -84
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query26.tpl +0 -61
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query27.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query28.tpl +0 -90
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query29.tpl +0 -85
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query3.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query30.tpl +0 -66
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query31.tpl +0 -88
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query32.tpl +0 -65
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query33.tpl +0 -113
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query34.tpl +0 -77
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query37.tpl +0 -57
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query38.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query39.tpl +0 -93
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query4.tpl +0 -154
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query40.tpl +0 -63
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query41.tpl +0 -90
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query42.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query43.tpl +0 -55
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query44.tpl +0 -72
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query45.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query46.tpl +0 -78
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query47.tpl +0 -89
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query48.tpl +0 -104
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query49.tpl +0 -164
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query50.tpl +0 -96
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query52.tpl +0 -59
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query53.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query54.tpl +0 -95
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query55.tpl +0 -52
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query56.tpl +0 -108
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query57.tpl +0 -87
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query58.tpl +0 -101
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query59.tpl +0 -79
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query6.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query60.tpl +0 -115
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query61.tpl +0 -83
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query62.tpl +0 -71
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query63.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query64.tpl +0 -157
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query65.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query66.tpl +0 -261
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query68.tpl +0 -82
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query69.tpl +0 -85
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query7.tpl +0 -60
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query71.tpl +0 -74
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query72.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query73.tpl +0 -69
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query74.tpl +0 -99
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query75.tpl +0 -107
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query76.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query78.tpl +0 -94
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query79.tpl +0 -60
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query8.tpl +0 -144
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query81.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query82.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query83.tpl +0 -104
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query84.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query85.tpl +0 -121
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query87.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query88.tpl +0 -128
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query89.tpl +0 -75
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query9.tpl +0 -88
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query90.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query91.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query92.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query93.tpl +0 -53
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query94.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query95.tpl +0 -71
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query96.tpl +0 -52
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query97.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query98.tpl +0 -70
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/query99.tpl +0 -69
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/sqlserver.tpl +0 -37
- benchbox/_binaries/tpc-ds/linux-arm64/query_templates/templates.lst +0 -99
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/README +0 -4
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/ansi.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/db2.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/netezza.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/oracle.tpl +0 -38
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query1.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query10.tpl +0 -98
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query11.tpl +0 -119
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query12.tpl +0 -72
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query13.tpl +0 -89
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query14.tpl +0 -247
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query15.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query16.tpl +0 -76
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query17.tpl +0 -80
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query18.tpl +0 -73
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query19.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query2.tpl +0 -94
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query20.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query21.tpl +0 -65
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query22.tpl +0 -54
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query23.tpl +0 -144
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query24.tpl +0 -147
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query25.tpl +0 -84
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query26.tpl +0 -61
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query27.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query28.tpl +0 -90
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query29.tpl +0 -85
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query3.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query30.tpl +0 -66
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query31.tpl +0 -88
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query32.tpl +0 -65
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query33.tpl +0 -113
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query34.tpl +0 -77
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query35.tpl +0 -98
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query36.tpl +0 -74
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query37.tpl +0 -57
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query38.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query39.tpl +0 -93
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query4.tpl +0 -154
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query40.tpl +0 -63
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query41.tpl +0 -90
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query42.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query43.tpl +0 -55
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query44.tpl +0 -72
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query45.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query46.tpl +0 -78
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query47.tpl +0 -89
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query48.tpl +0 -104
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query49.tpl +0 -164
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query5.tpl +0 -165
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query50.tpl +0 -96
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query51.tpl +0 -80
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query52.tpl +0 -59
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query53.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query54.tpl +0 -95
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query55.tpl +0 -52
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query56.tpl +0 -108
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query57.tpl +0 -87
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query58.tpl +0 -101
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query59.tpl +0 -79
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query6.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query60.tpl +0 -115
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query61.tpl +0 -83
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query62.tpl +0 -71
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query63.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query64.tpl +0 -157
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query65.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query66.tpl +0 -261
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query67.tpl +0 -81
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query68.tpl +0 -82
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query69.tpl +0 -85
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query7.tpl +0 -60
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query70.tpl +0 -73
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query71.tpl +0 -74
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query72.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query73.tpl +0 -69
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query74.tpl +0 -99
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query75.tpl +0 -107
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query76.tpl +0 -64
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query77.tpl +0 -145
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query78.tpl +0 -94
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query79.tpl +0 -60
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query8.tpl +0 -144
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query80.tpl +0 -131
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query81.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query82.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query83.tpl +0 -104
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query84.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query85.tpl +0 -121
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query86.tpl +0 -60
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query87.tpl +0 -56
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query88.tpl +0 -128
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query89.tpl +0 -75
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query9.tpl +0 -88
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query90.tpl +0 -58
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query91.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query92.tpl +0 -68
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query93.tpl +0 -53
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query94.tpl +0 -67
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query95.tpl +0 -71
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query96.tpl +0 -52
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query97.tpl +0 -62
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query98.tpl +0 -70
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/query99.tpl +0 -69
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/sqlserver.tpl +0 -37
- benchbox/_binaries/tpc-ds/linux-x86_64/query_templates/templates.lst +0 -99
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/README +0 -4
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/ansi.tpl +0 -38
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/db2.tpl +0 -38
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/netezza.tpl +0 -38
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/oracle.tpl +0 -38
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query1.tpl +0 -62
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query10.tpl +0 -98
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query11.tpl +0 -119
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query12.tpl +0 -72
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query13.tpl +0 -89
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query14.tpl +0 -247
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query15.tpl +0 -56
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query16.tpl +0 -76
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query17.tpl +0 -80
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query18.tpl +0 -73
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query19.tpl +0 -64
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query2.tpl +0 -94
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query20.tpl +0 -67
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query21.tpl +0 -65
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query22.tpl +0 -54
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query23.tpl +0 -144
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query24.tpl +0 -147
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query25.tpl +0 -84
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query26.tpl +0 -61
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query27.tpl +0 -68
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query28.tpl +0 -90
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query29.tpl +0 -85
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query3.tpl +0 -58
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query30.tpl +0 -66
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query31.tpl +0 -88
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query32.tpl +0 -65
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query33.tpl +0 -113
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query34.tpl +0 -77
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query35.tpl +0 -98
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query36.tpl +0 -74
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query37.tpl +0 -57
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query38.tpl +0 -58
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query39.tpl +0 -93
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query4.tpl +0 -154
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query40.tpl +0 -63
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query41.tpl +0 -90
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query42.tpl +0 -64
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query43.tpl +0 -55
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query44.tpl +0 -72
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query45.tpl +0 -56
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query46.tpl +0 -78
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query47.tpl +0 -89
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query48.tpl +0 -104
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query49.tpl +0 -164
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query5.tpl +0 -165
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query50.tpl +0 -96
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query51.tpl +0 -80
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query52.tpl +0 -59
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query53.tpl +0 -64
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query54.tpl +0 -95
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query55.tpl +0 -52
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query56.tpl +0 -108
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query57.tpl +0 -87
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query58.tpl +0 -101
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query59.tpl +0 -79
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query6.tpl +0 -62
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query60.tpl +0 -115
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query61.tpl +0 -83
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query62.tpl +0 -71
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query63.tpl +0 -64
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query64.tpl +0 -157
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query65.tpl +0 -62
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query66.tpl +0 -261
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query67.tpl +0 -81
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query68.tpl +0 -82
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query69.tpl +0 -85
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query7.tpl +0 -60
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query70.tpl +0 -73
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query71.tpl +0 -74
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query72.tpl +0 -67
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query73.tpl +0 -69
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query74.tpl +0 -99
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query75.tpl +0 -107
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query76.tpl +0 -64
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query77.tpl +0 -145
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query78.tpl +0 -94
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query79.tpl +0 -60
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query8.tpl +0 -144
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query80.tpl +0 -131
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query81.tpl +0 -68
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query82.tpl +0 -56
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query83.tpl +0 -104
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query84.tpl +0 -58
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query85.tpl +0 -121
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query86.tpl +0 -60
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query87.tpl +0 -56
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query88.tpl +0 -128
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query89.tpl +0 -75
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query9.tpl +0 -88
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query90.tpl +0 -58
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query91.tpl +0 -68
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query92.tpl +0 -68
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query93.tpl +0 -53
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query94.tpl +0 -67
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query95.tpl +0 -71
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query96.tpl +0 -52
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query97.tpl +0 -62
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query98.tpl +0 -70
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/query99.tpl +0 -69
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/sqlserver.tpl +0 -37
- benchbox/_binaries/tpc-ds/windows-x86_64/query_templates/templates.lst +0 -99
- benchbox-0.1.0.dist-info/RECORD +0 -1192
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/README +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/ansi.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/db2.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/netezza.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/oracle.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query1.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query10.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query11.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query12.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query13.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query14.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query15.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query16.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query17.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query18.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query19.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query2.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query20.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query21.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query22.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query23.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query24.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query25.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query26.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query27.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query28.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query29.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query3.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query30.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query31.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query32.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query33.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query34.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query35.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query36.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query37.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query38.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query39.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query4.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query40.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query41.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query42.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query43.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query44.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query45.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query46.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query47.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query48.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query49.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query5.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query50.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query51.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query52.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query53.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query54.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query55.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query56.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query57.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query58.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query59.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query6.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query60.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query61.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query62.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query63.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query64.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query65.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query66.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query67.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query68.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query69.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query7.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query70.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query71.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query73.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query74.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query75.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query76.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query77.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query78.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query79.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query8.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query80.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query81.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query82.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query83.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query84.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query85.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query86.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query87.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query88.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query89.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query9.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query90.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query91.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query92.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query93.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query94.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query95.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query96.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query97.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query98.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/query99.tpl +0 -0
- /benchbox/_binaries/tpc-ds/{darwin-arm64 → templates}/query_templates/templates.lst +0 -0
- {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/entry_points.txt +0 -0
- {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/licenses/LICENSE +0 -0
- {benchbox-0.1.0.dist-info → benchbox-0.1.1.dist-info}/top_level.txt +0 -0
|
@@ -505,6 +505,287 @@ class TPCDSMaintenanceTest:
|
|
|
505
505
|
],
|
|
506
506
|
}
|
|
507
507
|
|
|
508
|
+
def get_maintenance_operations_sql(
|
|
509
|
+
self,
|
|
510
|
+
placeholder: str = "?",
|
|
511
|
+
) -> dict[str, list[str]]:
|
|
512
|
+
"""Generate maintenance operation SQL for dry-run preview.
|
|
513
|
+
|
|
514
|
+
Uses the SAME data generation and SQL construction logic as actual execution
|
|
515
|
+
via MaintenanceOperations, ensuring dry-run output matches what would actually
|
|
516
|
+
be executed. This follows the same pattern as TPC-H's get_maintenance_operations_sql().
|
|
517
|
+
|
|
518
|
+
Args:
|
|
519
|
+
placeholder: SQL parameter placeholder style ('?' for DuckDB/SQLite, '%s' for PostgreSQL)
|
|
520
|
+
|
|
521
|
+
Returns:
|
|
522
|
+
Dict mapping operation IDs to lists of SQL statements
|
|
523
|
+
"""
|
|
524
|
+
result: dict[str, list[str]] = {}
|
|
525
|
+
|
|
526
|
+
# Calculate operation counts based on scale factor (same as actual execution)
|
|
527
|
+
# These match the row counts used in _execute_maintenance_operation
|
|
528
|
+
insert_rows = max(10, int(self.scale_factor * 100))
|
|
529
|
+
update_rows = max(5, int(self.scale_factor * 50))
|
|
530
|
+
delete_rows = max(2, int(self.scale_factor * 20))
|
|
531
|
+
|
|
532
|
+
# Initialize maintenance_ops with mock dimension ranges for dry-run
|
|
533
|
+
# (actual execution would query these from the database)
|
|
534
|
+
self._init_maintenance_ops_for_dryrun()
|
|
535
|
+
|
|
536
|
+
# DM1: INSERT operations for fact tables - uses SAME row generation as actual execution
|
|
537
|
+
result["DM1_INSERT"] = self._generate_insert_sql_via_maintenance_ops(placeholder, insert_rows)
|
|
538
|
+
|
|
539
|
+
# DM2: INSERT operations for returns tables
|
|
540
|
+
# Note: In actual execution, returns require querying existing sales for FK refs.
|
|
541
|
+
# For dry-run, we show the SQL structure that would be generated.
|
|
542
|
+
result["DM2_INSERT_RETURNS"] = self._generate_returns_insert_sql_via_maintenance_ops(
|
|
543
|
+
placeholder, insert_rows // 10
|
|
544
|
+
)
|
|
545
|
+
|
|
546
|
+
# DM3: UPDATE operations for dimension tables
|
|
547
|
+
result["DM3_UPDATE"] = self._generate_update_sql_via_maintenance_ops(placeholder, update_rows)
|
|
548
|
+
|
|
549
|
+
# DM4: DELETE operations for old data cleanup
|
|
550
|
+
result["DM4_DELETE"] = self._generate_delete_sql_via_maintenance_ops(placeholder, delete_rows)
|
|
551
|
+
|
|
552
|
+
return result
|
|
553
|
+
|
|
554
|
+
def _init_maintenance_ops_for_dryrun(self) -> None:
|
|
555
|
+
"""Initialize MaintenanceOperations with mock dimension ranges for dry-run.
|
|
556
|
+
|
|
557
|
+
Sets up dimension key ranges based on scale factor estimates, allowing
|
|
558
|
+
row generation to work without database queries.
|
|
559
|
+
"""
|
|
560
|
+
# Set up dimension ranges based on TPC-DS scale factor estimates
|
|
561
|
+
# These are approximate but match the ranges used in actual data generation
|
|
562
|
+
sf = self.scale_factor
|
|
563
|
+
|
|
564
|
+
self.maintenance_ops.dimension_ranges = {
|
|
565
|
+
"date_dim": (2450815, 2453005), # Standard TPC-DS date range
|
|
566
|
+
"time_dim": (0, 86399), # Seconds in a day
|
|
567
|
+
"item": (1, max(1, int(18000 * sf))),
|
|
568
|
+
"customer": (1, max(1, int(100000 * sf))),
|
|
569
|
+
"customer_demographics": (1, 1920800), # Fixed cardinality
|
|
570
|
+
"household_demographics": (1, 7200), # Fixed cardinality
|
|
571
|
+
"customer_address": (1, max(1, int(50000 * sf))),
|
|
572
|
+
"store": (1, max(1, int(12 * sf))),
|
|
573
|
+
"promotion": (1, max(1, int(300 * sf))),
|
|
574
|
+
"call_center": (1, max(1, int(6 * sf))),
|
|
575
|
+
"catalog_page": (1, max(1, int(11718 * sf))),
|
|
576
|
+
"ship_mode": (1, 20), # Fixed cardinality
|
|
577
|
+
"warehouse": (1, max(1, int(5 * sf))),
|
|
578
|
+
"web_site": (1, max(1, int(30 * sf))),
|
|
579
|
+
"web_page": (1, max(1, int(60 * sf))),
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
# Seed random generator for reproducible dry-run output
|
|
583
|
+
self.maintenance_ops.random_gen.seed(42)
|
|
584
|
+
|
|
585
|
+
def _generate_insert_sql_via_maintenance_ops(self, placeholder: str, num_rows: int) -> list[str]:
|
|
586
|
+
"""Generate INSERT SQL using the SAME row generation as actual execution.
|
|
587
|
+
|
|
588
|
+
This uses MaintenanceOperations._generate_*_row() methods - the exact same
|
|
589
|
+
methods used during actual maintenance test execution.
|
|
590
|
+
"""
|
|
591
|
+
statements = []
|
|
592
|
+
batch_size = min(100, num_rows) # Same batch size as _execute_batched_insert
|
|
593
|
+
|
|
594
|
+
# Store Sales INSERT - using _generate_store_sales_row() (same as _insert_store_sales)
|
|
595
|
+
store_sales_rows = [self.maintenance_ops._generate_store_sales_row() for _ in range(batch_size)]
|
|
596
|
+
columns = """SS_SOLD_DATE_SK, SS_SOLD_TIME_SK, SS_ITEM_SK, SS_CUSTOMER_SK,
|
|
597
|
+
SS_CDEMO_SK, SS_HDEMO_SK, SS_ADDR_SK, SS_STORE_SK, SS_PROMO_SK,
|
|
598
|
+
SS_TICKET_NUMBER, SS_QUANTITY, SS_WHOLESALE_COST, SS_LIST_PRICE,
|
|
599
|
+
SS_SALES_PRICE, SS_EXT_DISCOUNT_AMT, SS_EXT_SALES_PRICE,
|
|
600
|
+
SS_EXT_WHOLESALE_COST, SS_EXT_LIST_PRICE, SS_EXT_TAX,
|
|
601
|
+
SS_COUPON_AMT, SS_NET_PAID, SS_NET_PAID_INC_TAX, SS_NET_PROFIT"""
|
|
602
|
+
|
|
603
|
+
# Build multi-row VALUES clause (same as _execute_batched_insert)
|
|
604
|
+
row_placeholders = ", ".join([placeholder] * 23)
|
|
605
|
+
values_placeholders = ", ".join([f"({row_placeholders})" for _ in store_sales_rows])
|
|
606
|
+
sample_row = store_sales_rows[0] if store_sales_rows else ()
|
|
607
|
+
|
|
608
|
+
statements.append(
|
|
609
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} new store sales records\n"
|
|
610
|
+
f"-- Sample row values: {sample_row[:5]}...\n"
|
|
611
|
+
f"INSERT INTO STORE_SALES ({columns}) VALUES {values_placeholders}"
|
|
612
|
+
)
|
|
613
|
+
|
|
614
|
+
# Catalog Sales INSERT - using _generate_catalog_sales_row() (same as _insert_catalog_sales)
|
|
615
|
+
catalog_sales_rows = [self.maintenance_ops._generate_catalog_sales_row() for _ in range(batch_size)]
|
|
616
|
+
columns = """CS_SOLD_DATE_SK, CS_SOLD_TIME_SK, CS_SHIP_DATE_SK, CS_BILL_CUSTOMER_SK,
|
|
617
|
+
CS_BILL_CDEMO_SK, CS_BILL_HDEMO_SK, CS_BILL_ADDR_SK, CS_SHIP_CUSTOMER_SK,
|
|
618
|
+
CS_SHIP_CDEMO_SK, CS_SHIP_HDEMO_SK, CS_SHIP_ADDR_SK, CS_CALL_CENTER_SK,
|
|
619
|
+
CS_CATALOG_PAGE_SK, CS_SHIP_MODE_SK, CS_WAREHOUSE_SK, CS_ITEM_SK,
|
|
620
|
+
CS_PROMO_SK, CS_ORDER_NUMBER, CS_QUANTITY, CS_WHOLESALE_COST,
|
|
621
|
+
CS_LIST_PRICE, CS_SALES_PRICE, CS_EXT_DISCOUNT_AMT, CS_EXT_SALES_PRICE,
|
|
622
|
+
CS_EXT_WHOLESALE_COST, CS_EXT_LIST_PRICE, CS_EXT_TAX, CS_COUPON_AMT,
|
|
623
|
+
CS_EXT_SHIP_COST, CS_NET_PAID, CS_NET_PAID_INC_TAX, CS_NET_PAID_INC_SHIP,
|
|
624
|
+
CS_NET_PAID_INC_SHIP_TAX, CS_NET_PROFIT"""
|
|
625
|
+
|
|
626
|
+
row_placeholders = ", ".join([placeholder] * 34)
|
|
627
|
+
values_placeholders = ", ".join([f"({row_placeholders})" for _ in catalog_sales_rows])
|
|
628
|
+
sample_row = catalog_sales_rows[0] if catalog_sales_rows else ()
|
|
629
|
+
|
|
630
|
+
statements.append(
|
|
631
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} new catalog sales records\n"
|
|
632
|
+
f"-- Sample row values: {sample_row[:5]}...\n"
|
|
633
|
+
f"INSERT INTO CATALOG_SALES ({columns}) VALUES {values_placeholders}"
|
|
634
|
+
)
|
|
635
|
+
|
|
636
|
+
# Web Sales INSERT - using _generate_web_sales_row() (same as _insert_web_sales)
|
|
637
|
+
web_sales_rows = [self.maintenance_ops._generate_web_sales_row() for _ in range(batch_size)]
|
|
638
|
+
columns = """WS_SOLD_DATE_SK, WS_SOLD_TIME_SK, WS_SHIP_DATE_SK, WS_ITEM_SK,
|
|
639
|
+
WS_BILL_CUSTOMER_SK, WS_BILL_CDEMO_SK, WS_BILL_HDEMO_SK, WS_BILL_ADDR_SK,
|
|
640
|
+
WS_SHIP_CUSTOMER_SK, WS_SHIP_CDEMO_SK, WS_SHIP_HDEMO_SK, WS_SHIP_ADDR_SK,
|
|
641
|
+
WS_WEB_PAGE_SK, WS_WEB_SITE_SK, WS_SHIP_MODE_SK, WS_WAREHOUSE_SK,
|
|
642
|
+
WS_PROMO_SK, WS_ORDER_NUMBER, WS_QUANTITY, WS_WHOLESALE_COST,
|
|
643
|
+
WS_LIST_PRICE, WS_SALES_PRICE, WS_EXT_DISCOUNT_AMT, WS_EXT_SALES_PRICE,
|
|
644
|
+
WS_EXT_WHOLESALE_COST, WS_EXT_LIST_PRICE, WS_EXT_TAX, WS_COUPON_AMT,
|
|
645
|
+
WS_EXT_SHIP_COST, WS_NET_PAID, WS_NET_PAID_INC_TAX, WS_NET_PAID_INC_SHIP,
|
|
646
|
+
WS_NET_PAID_INC_SHIP_TAX, WS_NET_PROFIT"""
|
|
647
|
+
|
|
648
|
+
row_placeholders = ", ".join([placeholder] * 34)
|
|
649
|
+
values_placeholders = ", ".join([f"({row_placeholders})" for _ in web_sales_rows])
|
|
650
|
+
sample_row = web_sales_rows[0] if web_sales_rows else ()
|
|
651
|
+
|
|
652
|
+
statements.append(
|
|
653
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} new web sales records\n"
|
|
654
|
+
f"-- Sample row values: {sample_row[:5]}...\n"
|
|
655
|
+
f"INSERT INTO WEB_SALES ({columns}) VALUES {values_placeholders}"
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
return statements
|
|
659
|
+
|
|
660
|
+
def _generate_returns_insert_sql_via_maintenance_ops(self, placeholder: str, num_rows: int) -> list[str]:
|
|
661
|
+
"""Generate returns INSERT SQL showing the structure used in actual execution.
|
|
662
|
+
|
|
663
|
+
Note: In actual execution, returns require querying existing sales records
|
|
664
|
+
to get valid FK references (ticket_number, item_sk, etc.). For dry-run,
|
|
665
|
+
we show the SQL structure with placeholder references.
|
|
666
|
+
"""
|
|
667
|
+
statements = []
|
|
668
|
+
|
|
669
|
+
# Store Returns - actual execution queries STORE_SALES first, then calls
|
|
670
|
+
# _generate_store_returns_from_sale() with the sale record
|
|
671
|
+
columns = """SR_RETURNED_DATE_SK, SR_RETURN_TIME_SK, SR_ITEM_SK, SR_CUSTOMER_SK,
|
|
672
|
+
SR_CDEMO_SK, SR_HDEMO_SK, SR_ADDR_SK, SR_STORE_SK, SR_REASON_SK,
|
|
673
|
+
SR_TICKET_NUMBER, SR_RETURN_QUANTITY, SR_RETURN_AMT, SR_RETURN_TAX,
|
|
674
|
+
SR_RETURN_AMT_INC_TAX, SR_FEE, SR_RETURN_SHIP_COST, SR_REFUNDED_CASH,
|
|
675
|
+
SR_REVERSED_CHARGE, SR_STORE_CREDIT, SR_NET_LOSS"""
|
|
676
|
+
|
|
677
|
+
row_placeholders = ", ".join([placeholder] * 20)
|
|
678
|
+
statements.append(
|
|
679
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} store returns\n"
|
|
680
|
+
f"-- Step 1: Query STORE_SALES to get valid (ticket_number, item_sk) pairs\n"
|
|
681
|
+
f"-- Step 2: Generate returns referencing those sales\n"
|
|
682
|
+
f"INSERT INTO STORE_RETURNS ({columns}) VALUES ({row_placeholders})"
|
|
683
|
+
)
|
|
684
|
+
|
|
685
|
+
# Catalog Returns - actual execution queries CATALOG_SALES first
|
|
686
|
+
columns = """CR_RETURNED_DATE_SK, CR_RETURNED_TIME_SK, CR_ITEM_SK, CR_REFUNDED_CUSTOMER_SK,
|
|
687
|
+
CR_REFUNDED_CDEMO_SK, CR_REFUNDED_HDEMO_SK, CR_REFUNDED_ADDR_SK,
|
|
688
|
+
CR_RETURNING_CUSTOMER_SK, CR_RETURNING_CDEMO_SK, CR_RETURNING_HDEMO_SK,
|
|
689
|
+
CR_RETURNING_ADDR_SK, CR_CALL_CENTER_SK, CR_CATALOG_PAGE_SK, CR_SHIP_MODE_SK,
|
|
690
|
+
CR_WAREHOUSE_SK, CR_REASON_SK, CR_ORDER_NUMBER, CR_RETURN_QUANTITY,
|
|
691
|
+
CR_RETURN_AMOUNT, CR_RETURN_TAX, CR_RETURN_AMT_INC_TAX, CR_FEE,
|
|
692
|
+
CR_RETURN_SHIP_COST, CR_REFUNDED_CASH, CR_REVERSED_CHARGE, CR_STORE_CREDIT,
|
|
693
|
+
CR_NET_LOSS"""
|
|
694
|
+
|
|
695
|
+
row_placeholders = ", ".join([placeholder] * 27)
|
|
696
|
+
statements.append(
|
|
697
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} catalog returns\n"
|
|
698
|
+
f"-- Step 1: Query CATALOG_SALES to get valid (order_number, item_sk) pairs\n"
|
|
699
|
+
f"-- Step 2: Generate returns referencing those sales\n"
|
|
700
|
+
f"INSERT INTO CATALOG_RETURNS ({columns}) VALUES ({row_placeholders})"
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
# Web Returns - actual execution queries WEB_SALES first
|
|
704
|
+
columns = """WR_RETURNED_DATE_SK, WR_RETURNED_TIME_SK, WR_ITEM_SK, WR_REFUNDED_CUSTOMER_SK,
|
|
705
|
+
WR_REFUNDED_CDEMO_SK, WR_REFUNDED_HDEMO_SK, WR_REFUNDED_ADDR_SK,
|
|
706
|
+
WR_RETURNING_CUSTOMER_SK, WR_RETURNING_CDEMO_SK, WR_RETURNING_HDEMO_SK,
|
|
707
|
+
WR_RETURNING_ADDR_SK, WR_WEB_PAGE_SK, WR_REASON_SK, WR_ORDER_NUMBER,
|
|
708
|
+
WR_RETURN_QUANTITY, WR_RETURN_AMT, WR_RETURN_TAX, WR_RETURN_AMT_INC_TAX,
|
|
709
|
+
WR_FEE, WR_RETURN_SHIP_COST, WR_REFUNDED_CASH, WR_REVERSED_CHARGE,
|
|
710
|
+
WR_ACCOUNT_CREDIT, WR_NET_LOSS"""
|
|
711
|
+
|
|
712
|
+
row_placeholders = ", ".join([placeholder] * 24)
|
|
713
|
+
statements.append(
|
|
714
|
+
f"-- TPC-DS Maintenance: Insert {num_rows} web returns\n"
|
|
715
|
+
f"-- Step 1: Query WEB_SALES to get valid (order_number, item_sk) pairs\n"
|
|
716
|
+
f"-- Step 2: Generate returns referencing those sales\n"
|
|
717
|
+
f"INSERT INTO WEB_RETURNS ({columns}) VALUES ({row_placeholders})"
|
|
718
|
+
)
|
|
719
|
+
|
|
720
|
+
return statements
|
|
721
|
+
|
|
722
|
+
def _generate_update_sql_via_maintenance_ops(self, placeholder: str, num_rows: int) -> list[str]:
|
|
723
|
+
"""Generate UPDATE SQL using the SAME logic as actual execution.
|
|
724
|
+
|
|
725
|
+
These match the UPDATE statements in MaintenanceOperations._update_* methods.
|
|
726
|
+
"""
|
|
727
|
+
statements = []
|
|
728
|
+
|
|
729
|
+
# Customer UPDATE - matches _update_customer logic
|
|
730
|
+
statements.append(
|
|
731
|
+
f"-- TPC-DS Maintenance: Update {num_rows} customer records\n"
|
|
732
|
+
f"-- Same logic as MaintenanceOperations._update_customer()\n"
|
|
733
|
+
f"UPDATE CUSTOMER SET C_CURRENT_ADDR_SK = {placeholder} WHERE C_CUSTOMER_SK = {placeholder}"
|
|
734
|
+
)
|
|
735
|
+
|
|
736
|
+
# Item UPDATE - matches _update_item logic
|
|
737
|
+
statements.append(
|
|
738
|
+
f"-- TPC-DS Maintenance: Update {num_rows} item prices\n"
|
|
739
|
+
f"-- Same logic as MaintenanceOperations._update_item()\n"
|
|
740
|
+
f"UPDATE ITEM SET I_CURRENT_PRICE = {placeholder} WHERE I_ITEM_SK = {placeholder}"
|
|
741
|
+
)
|
|
742
|
+
|
|
743
|
+
# Inventory UPDATE - matches _update_inventory logic
|
|
744
|
+
statements.append(
|
|
745
|
+
f"-- TPC-DS Maintenance: Update {num_rows} inventory levels\n"
|
|
746
|
+
f"-- Same logic as MaintenanceOperations._update_inventory()\n"
|
|
747
|
+
f"UPDATE INVENTORY SET INV_QUANTITY_ON_HAND = {placeholder} "
|
|
748
|
+
f"WHERE INV_DATE_SK = {placeholder} AND INV_ITEM_SK = {placeholder} AND INV_WAREHOUSE_SK = {placeholder}"
|
|
749
|
+
)
|
|
750
|
+
|
|
751
|
+
return statements
|
|
752
|
+
|
|
753
|
+
def _generate_delete_sql_via_maintenance_ops(self, placeholder: str, num_rows: int) -> list[str]:
|
|
754
|
+
"""Generate DELETE SQL using the SAME logic as actual execution.
|
|
755
|
+
|
|
756
|
+
These match the DELETE statements in MaintenanceOperations._delete_* methods.
|
|
757
|
+
"""
|
|
758
|
+
statements = []
|
|
759
|
+
|
|
760
|
+
# The cutoff_date_sk matches _delete_old_sales
|
|
761
|
+
cutoff_date_sk = 2450815
|
|
762
|
+
|
|
763
|
+
# Delete old sales - matches _delete_old_sales logic
|
|
764
|
+
statements.append(
|
|
765
|
+
f"-- TPC-DS Maintenance: Delete {num_rows} old store sales records\n"
|
|
766
|
+
f"-- Same logic as MaintenanceOperations._delete_old_sales()\n"
|
|
767
|
+
f"DELETE FROM STORE_SALES WHERE SS_SOLD_DATE_SK < {cutoff_date_sk} LIMIT {num_rows // 3}"
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
statements.append(
|
|
771
|
+
f"-- TPC-DS Maintenance: Delete {num_rows} old catalog sales records\n"
|
|
772
|
+
f"DELETE FROM CATALOG_SALES WHERE CS_SOLD_DATE_SK < {cutoff_date_sk} LIMIT {num_rows // 3}"
|
|
773
|
+
)
|
|
774
|
+
|
|
775
|
+
statements.append(
|
|
776
|
+
f"-- TPC-DS Maintenance: Delete {num_rows} old web sales records\n"
|
|
777
|
+
f"DELETE FROM WEB_SALES WHERE WS_SOLD_DATE_SK < {cutoff_date_sk} LIMIT {num_rows // 3}"
|
|
778
|
+
)
|
|
779
|
+
|
|
780
|
+
# Delete old returns - matches _delete_old_returns logic
|
|
781
|
+
statements.append(
|
|
782
|
+
f"-- TPC-DS Maintenance: Delete {num_rows // 2} old store returns\n"
|
|
783
|
+
f"-- Same logic as MaintenanceOperations._delete_old_returns()\n"
|
|
784
|
+
f"DELETE FROM STORE_RETURNS WHERE SR_RETURNED_DATE_SK < {cutoff_date_sk} LIMIT {num_rows // 3}"
|
|
785
|
+
)
|
|
786
|
+
|
|
787
|
+
return statements
|
|
788
|
+
|
|
508
789
|
|
|
509
790
|
# Aliases for backward compatibility
|
|
510
791
|
MaintenanceTest = TPCDSMaintenanceTest
|
|
@@ -365,12 +365,20 @@ class TPCDSPowerTest:
|
|
|
365
365
|
|
|
366
366
|
connection.close()
|
|
367
367
|
|
|
368
|
-
# Calculate Power@Size metric
|
|
368
|
+
# Calculate Power@Size metric (geometric mean per TPC spec)
|
|
369
369
|
total_execution_time = time.time() - start_time
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
370
|
+
exec_times = [
|
|
371
|
+
qr["execution_time"]
|
|
372
|
+
for qr in result.query_results
|
|
373
|
+
if qr.get("success", True) and qr.get("execution_time", 0) > 0
|
|
374
|
+
]
|
|
375
|
+
if exec_times:
|
|
376
|
+
from benchbox.core.results.metrics import TPCMetricsCalculator
|
|
377
|
+
|
|
378
|
+
result.power_at_size = TPCMetricsCalculator.calculate_power_at_size(
|
|
379
|
+
exec_times,
|
|
380
|
+
self.config.scale_factor,
|
|
381
|
+
)
|
|
374
382
|
|
|
375
383
|
result.total_time = total_execution_time
|
|
376
384
|
result.end_time = datetime.now().isoformat()
|
|
@@ -496,18 +504,20 @@ class TPCDSPowerTest:
|
|
|
496
504
|
|
|
497
505
|
return not result.power_at_size <= 0
|
|
498
506
|
|
|
499
|
-
def _calculate_power_at_size(self,
|
|
500
|
-
"""Calculate Power@Size metric.
|
|
507
|
+
def _calculate_power_at_size(self, exec_times: list[float]) -> float:
|
|
508
|
+
"""Calculate Power@Size metric using geometric mean.
|
|
501
509
|
|
|
502
510
|
Args:
|
|
503
|
-
|
|
511
|
+
exec_times: Per-query execution times in seconds
|
|
504
512
|
|
|
505
513
|
Returns:
|
|
506
|
-
Power@Size metric (3600 * SF /
|
|
514
|
+
Power@Size metric (3600 * SF / geometric_mean(exec_times))
|
|
507
515
|
"""
|
|
508
|
-
if
|
|
516
|
+
if not exec_times:
|
|
509
517
|
return 0.0
|
|
510
|
-
|
|
518
|
+
from benchbox.core.results.metrics import TPCMetricsCalculator
|
|
519
|
+
|
|
520
|
+
return TPCMetricsCalculator.calculate_power_at_size(exec_times, self.scale_factor)
|
|
511
521
|
|
|
512
522
|
@property
|
|
513
523
|
def query_sequence(self) -> list:
|
|
@@ -395,12 +395,14 @@ class TPCDSThroughputTest:
|
|
|
395
395
|
streams = stream_manager.generate_streams()
|
|
396
396
|
stream_queries = streams.get(stream_id, [])
|
|
397
397
|
|
|
398
|
-
# Execute queries
|
|
399
|
-
|
|
398
|
+
# Execute all queries including multi-part variants (14a/b, 23a/b, 24a/b, 39a/b)
|
|
399
|
+
# TPC-DS specifies 99 query templates, but 4 of them (14, 23, 24, 39) have 2 parts each
|
|
400
|
+
# Total: 95 single queries + 8 variant queries = 103 queries per stream
|
|
401
|
+
all_queries = stream_queries
|
|
400
402
|
|
|
401
403
|
# Apply query subset limit if configured
|
|
402
404
|
if config.queries_per_stream is not None:
|
|
403
|
-
query_subset =
|
|
405
|
+
query_subset = all_queries[: min(config.queries_per_stream, len(all_queries))]
|
|
404
406
|
if config.verbose:
|
|
405
407
|
self.logger.info(
|
|
406
408
|
f"Stream {stream_id} using TPC-DS permutation with {len(query_subset)} queries "
|
|
@@ -408,7 +410,7 @@ class TPCDSThroughputTest:
|
|
|
408
410
|
)
|
|
409
411
|
else:
|
|
410
412
|
# Execute all queries (full TPC-DS compliance)
|
|
411
|
-
query_subset =
|
|
413
|
+
query_subset = all_queries
|
|
412
414
|
if config.verbose:
|
|
413
415
|
self.logger.info(
|
|
414
416
|
f"Stream {stream_id} using TPC-DS permutation with {len(query_subset)} queries (full query set)"
|
|
@@ -416,9 +418,12 @@ class TPCDSThroughputTest:
|
|
|
416
418
|
|
|
417
419
|
for position, stream_query in enumerate(query_subset):
|
|
418
420
|
query_id = stream_query.query_id
|
|
421
|
+
variant = stream_query.variant
|
|
422
|
+
# Display ID includes variant suffix (e.g., "14a", "23b")
|
|
423
|
+
query_display_id = f"{query_id}{variant}" if variant else str(query_id)
|
|
419
424
|
query_start = time.time()
|
|
420
425
|
query_result = {
|
|
421
|
-
"query_id":
|
|
426
|
+
"query_id": query_display_id,
|
|
422
427
|
"position": position + 1,
|
|
423
428
|
"stream_id": stream_id,
|
|
424
429
|
"execution_time": 0.0,
|
|
@@ -431,13 +436,26 @@ class TPCDSThroughputTest:
|
|
|
431
436
|
# Get the query with stream-specific parameters
|
|
432
437
|
# Use stream and position-specific seed as per TPC-DS specification
|
|
433
438
|
stream_seed = seed + stream_id * 1000 + position
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
439
|
+
# Pass variant parameter for multi-part queries (14a/b, 23a/b, 24a/b, 39a/b)
|
|
440
|
+
if variant is not None:
|
|
441
|
+
query_text = self.benchmark.get_query(
|
|
442
|
+
query_id,
|
|
443
|
+
seed=stream_seed,
|
|
444
|
+
scale_factor=config.scale_factor,
|
|
445
|
+
variant=variant,
|
|
446
|
+
dialect=self.target_dialect,
|
|
447
|
+
)
|
|
448
|
+
else:
|
|
449
|
+
query_text = self.benchmark.get_query(
|
|
450
|
+
query_id, seed=stream_seed, scale_factor=config.scale_factor, dialect=self.target_dialect
|
|
451
|
+
)
|
|
437
452
|
|
|
438
453
|
# Execute the actual query to enable dry-run capture via platform adapter
|
|
439
|
-
label = f"Stream_{stream_id}_Position_{position + 1}_Query_{
|
|
454
|
+
label = f"Stream_{stream_id}_Position_{position + 1}_Query_{query_display_id}"
|
|
440
455
|
try:
|
|
456
|
+
# Set query context before execution for validation and error reporting
|
|
457
|
+
if hasattr(connection, "set_query_context"):
|
|
458
|
+
connection.set_query_context(query_display_id, stream_id=stream_id)
|
|
441
459
|
cursor = connection.execute(query_text)
|
|
442
460
|
# Fetch to complete execution in non-dry-run
|
|
443
461
|
if hasattr(cursor, "fetchall"):
|
|
@@ -5,6 +5,8 @@ from __future__ import annotations
|
|
|
5
5
|
import json
|
|
6
6
|
import logging
|
|
7
7
|
import re
|
|
8
|
+
import shutil
|
|
9
|
+
import tempfile
|
|
8
10
|
from collections.abc import Sequence
|
|
9
11
|
from pathlib import Path
|
|
10
12
|
from typing import Any
|
|
@@ -79,7 +81,12 @@ class TPCDSOBTTransformer:
|
|
|
79
81
|
output_path = output_dir / f"{OBT_TABLE_NAME}.{output_format}"
|
|
80
82
|
manifest_path = output_dir / f"{OBT_TABLE_NAME}_manifest.json"
|
|
81
83
|
|
|
82
|
-
|
|
84
|
+
# Use a file-backed temp database so DuckDB can spill to disk effectively
|
|
85
|
+
# during the large multi-channel UNION+JOIN transformation.
|
|
86
|
+
tmp_dir = tempfile.mkdtemp(prefix="benchbox_obt_")
|
|
87
|
+
tmp_db_path = Path(tmp_dir) / "obt.duckdb"
|
|
88
|
+
|
|
89
|
+
conn = self._connect(tmp_db_path)
|
|
83
90
|
try:
|
|
84
91
|
self._load_source_tables(conn, tpcds_dir, channel_list)
|
|
85
92
|
union_sql = self._build_union_query(columns, channel_list)
|
|
@@ -107,14 +114,26 @@ class TPCDSOBTTransformer:
|
|
|
107
114
|
return {"table": output_path, "manifest": manifest_path}
|
|
108
115
|
finally:
|
|
109
116
|
conn.close()
|
|
117
|
+
shutil.rmtree(tmp_dir, ignore_errors=True)
|
|
118
|
+
|
|
119
|
+
def _connect(self, db_path: Path | None = None) -> Any:
|
|
120
|
+
"""Create a DuckDB connection configured for large ETL workloads.
|
|
110
121
|
|
|
111
|
-
|
|
112
|
-
|
|
122
|
+
Args:
|
|
123
|
+
db_path: Path to a file-backed database. If None, uses in-memory.
|
|
124
|
+
"""
|
|
125
|
+
target = str(db_path) if db_path else ":memory:"
|
|
113
126
|
if self._duckdb is None:
|
|
114
127
|
import duckdb
|
|
115
128
|
|
|
116
|
-
|
|
117
|
-
|
|
129
|
+
conn = duckdb.connect(target)
|
|
130
|
+
else:
|
|
131
|
+
conn = self._duckdb.connect(target)
|
|
132
|
+
|
|
133
|
+
# Configure for large-scale ETL: disable insertion-order preservation
|
|
134
|
+
# to reduce memory pressure during multi-way joins.
|
|
135
|
+
conn.execute("SET preserve_insertion_order = false")
|
|
136
|
+
return conn
|
|
118
137
|
|
|
119
138
|
def _validate_channels(self, channels: Sequence[str]) -> None:
|
|
120
139
|
"""Validate requested channels."""
|
|
@@ -839,6 +839,9 @@ def q21_expression_impl(ctx: DataFrameContext) -> Any:
|
|
|
839
839
|
"""TPC-H Q21: Suppliers Who Kept Orders Waiting (Expression Family).
|
|
840
840
|
|
|
841
841
|
Identifies suppliers who delayed orders they could have filled.
|
|
842
|
+
|
|
843
|
+
Optimized using filter pushdown to compute expensive aggregates
|
|
844
|
+
only for relevant orders, avoiding the costly unique() + join pattern.
|
|
842
845
|
"""
|
|
843
846
|
supplier = ctx.get_table("supplier")
|
|
844
847
|
lineitem = ctx.get_table("lineitem")
|
|
@@ -849,59 +852,59 @@ def q21_expression_impl(ctx: DataFrameContext) -> Any:
|
|
|
849
852
|
|
|
850
853
|
nation_name = "SAUDI ARABIA"
|
|
851
854
|
|
|
852
|
-
#
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
col("
|
|
855
|
+
# Step 1: Target suppliers from the specified nation (small set ~400)
|
|
856
|
+
target_suppliers = (
|
|
857
|
+
supplier.join(nation, left_on="s_nationkey", right_on="n_nationkey")
|
|
858
|
+
.filter(col("n_name") == lit(nation_name))
|
|
859
|
+
.select(col("s_suppkey").alias("target_suppkey"), col("s_name"))
|
|
856
860
|
)
|
|
857
861
|
|
|
858
|
-
#
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
862
|
+
# Step 2: Valid orders with status 'F'
|
|
863
|
+
valid_orders = orders.filter(col("o_orderstatus") == lit("F")).select(col("o_orderkey").alias("valid_orderkey"))
|
|
864
|
+
|
|
865
|
+
# Step 3: Candidates - late lineitems from target suppliers on valid orders
|
|
866
|
+
# This is our candidate set - much smaller than full lineitem table
|
|
867
|
+
candidates = (
|
|
868
|
+
lineitem.filter(col("l_receiptdate") > col("l_commitdate"))
|
|
869
|
+
.join(target_suppliers, left_on="l_suppkey", right_on="target_suppkey")
|
|
870
|
+
.join(valid_orders, left_on="l_orderkey", right_on="valid_orderkey")
|
|
871
|
+
.select("l_orderkey", "l_suppkey", "s_name")
|
|
864
872
|
)
|
|
865
873
|
|
|
866
|
-
#
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
874
|
+
# Step 4: Get candidate order keys for semi-join filtering
|
|
875
|
+
candidate_orders = candidates.select(col("l_orderkey").alias("cand_orderkey")).unique()
|
|
876
|
+
|
|
877
|
+
# Count distinct suppliers per order (only for candidate orders)
|
|
878
|
+
# This implements the EXISTS check: order has multiple suppliers
|
|
879
|
+
suppliers_per_order = (
|
|
880
|
+
lineitem.join(candidate_orders, left_on="l_orderkey", right_on="cand_orderkey", how="semi")
|
|
881
|
+
.group_by("l_orderkey")
|
|
882
|
+
.agg(col("l_suppkey").n_unique().alias("num_suppliers"))
|
|
883
|
+
.select(col("l_orderkey").alias("supp_orderkey"), col("num_suppliers"))
|
|
870
884
|
)
|
|
871
885
|
|
|
872
|
-
#
|
|
873
|
-
#
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
.
|
|
877
|
-
.
|
|
878
|
-
.
|
|
879
|
-
.
|
|
880
|
-
.join(multi_supplier_orders, left_on="l1_orderkey", right_on="l_orderkey", how="semi")
|
|
881
|
-
)
|
|
882
|
-
|
|
883
|
-
# For NOT EXISTS with correlated subquery, we need to:
|
|
884
|
-
# 1. Join with other_late
|
|
885
|
-
# 2. Filter where suppliers are different
|
|
886
|
-
# 3. Use anti join to exclude those orders
|
|
887
|
-
# Note: After join on s_suppkey=l1_suppkey, only s_suppkey remains
|
|
888
|
-
orders_with_other_late_suppliers = (
|
|
889
|
-
base.select("l1_orderkey", "s_suppkey")
|
|
890
|
-
.unique()
|
|
891
|
-
.join(other_late, left_on="l1_orderkey", right_on="l3_orderkey")
|
|
892
|
-
.filter(col("l3_suppkey") != col("s_suppkey"))
|
|
893
|
-
.select("l1_orderkey", "s_suppkey")
|
|
894
|
-
.unique()
|
|
886
|
+
# Count distinct LATE suppliers per order (only for candidate orders)
|
|
887
|
+
# This implements the NOT EXISTS check: no other supplier was late
|
|
888
|
+
late_suppliers_per_order = (
|
|
889
|
+
lineitem.filter(col("l_receiptdate") > col("l_commitdate"))
|
|
890
|
+
.join(candidate_orders, left_on="l_orderkey", right_on="cand_orderkey", how="semi")
|
|
891
|
+
.group_by("l_orderkey")
|
|
892
|
+
.agg(col("l_suppkey").n_unique().alias("num_late_suppliers"))
|
|
893
|
+
.select(col("l_orderkey").alias("late_orderkey"), col("num_late_suppliers"))
|
|
895
894
|
)
|
|
896
895
|
|
|
896
|
+
# Step 5: Join candidates with counts and apply EXISTS/NOT EXISTS as filters
|
|
897
897
|
result = (
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
)
|
|
898
|
+
candidates.join(suppliers_per_order, left_on="l_orderkey", right_on="supp_orderkey")
|
|
899
|
+
.join(late_suppliers_per_order, left_on="l_orderkey", right_on="late_orderkey")
|
|
900
|
+
# EXISTS: order has multiple suppliers
|
|
901
|
+
.filter(col("num_suppliers") > lit(1))
|
|
902
|
+
# NOT EXISTS: only this supplier was late (no other late suppliers)
|
|
903
|
+
# If num_late_suppliers == 1, and we're a late supplier, no one else was late
|
|
904
|
+
.filter(col("num_late_suppliers") == lit(1))
|
|
905
|
+
# Final aggregation
|
|
903
906
|
.group_by("s_name")
|
|
904
|
-
.agg(col("
|
|
907
|
+
.agg(col("l_orderkey").count().alias("numwait"))
|
|
905
908
|
.sort(["numwait", "s_name"], descending=[True, False])
|
|
906
909
|
.limit(100)
|
|
907
910
|
)
|
benchbox/core/tpch/generator.py
CHANGED
|
@@ -26,6 +26,7 @@ from benchbox.utils.cloud_storage import CloudStorageGeneratorMixin, create_path
|
|
|
26
26
|
from benchbox.utils.compression_mixin import CompressionMixin
|
|
27
27
|
from benchbox.utils.data_validation import BenchmarkDataValidator
|
|
28
28
|
from benchbox.utils.datagen_manifest import DataGenerationManifest, resolve_compression_metadata
|
|
29
|
+
from benchbox.utils.file_format import COMPRESSION_EXTENSIONS
|
|
29
30
|
from benchbox.utils.scale_factor import format_scale_factor
|
|
30
31
|
from benchbox.utils.tpc_compilation import CompilationStatus, ensure_tpc_binaries
|
|
31
32
|
from benchbox.utils.verbosity import VerbosityMixin, compute_verbosity
|
|
@@ -121,6 +122,10 @@ class TPCHDataGenerator(CompressionMixin, CloudStorageGeneratorMixin, VerbosityM
|
|
|
121
122
|
try:
|
|
122
123
|
self._dbgen_exe = self._find_or_build_dbgen()
|
|
123
124
|
self.dbgen_available = self._dbgen_exe.exists()
|
|
125
|
+
# Update dbgen_path to the directory containing the executable
|
|
126
|
+
# This ensures dists.dss can be found when using precompiled binaries
|
|
127
|
+
if self.dbgen_available:
|
|
128
|
+
self.dbgen_path = self._dbgen_exe.parent
|
|
124
129
|
except (FileNotFoundError, RuntimeError, PermissionError) as exc:
|
|
125
130
|
self.dbgen_available = False
|
|
126
131
|
self._dbgen_error = exc
|
|
@@ -202,13 +207,19 @@ class TPCHDataGenerator(CompressionMixin, CloudStorageGeneratorMixin, VerbosityM
|
|
|
202
207
|
|
|
203
208
|
def _raise_missing_dbgen(self) -> NoReturn:
|
|
204
209
|
"""Raise an error when dbgen is not available for data generation."""
|
|
210
|
+
import benchbox
|
|
211
|
+
|
|
212
|
+
pkg_dir = Path(benchbox.__file__).parent
|
|
213
|
+
binaries_path = pkg_dir / "_binaries/tpc-h"
|
|
214
|
+
|
|
205
215
|
message = (
|
|
206
|
-
"TPC-H
|
|
207
|
-
"
|
|
208
|
-
|
|
216
|
+
"TPC-H dbgen tool not found. Pre-compiled binaries should be at "
|
|
217
|
+
f"{binaries_path}/<platform>/ but were not found. "
|
|
218
|
+
"This may indicate a corrupted or incomplete installation. "
|
|
219
|
+
"Try reinstalling: pip install --force-reinstall benchbox"
|
|
209
220
|
)
|
|
210
221
|
if self._dbgen_error:
|
|
211
|
-
message += f"
|
|
222
|
+
message += f"\n\nDetails: {self._dbgen_error}"
|
|
212
223
|
raise RuntimeError(message)
|
|
213
224
|
|
|
214
225
|
def _find_or_build_dbgen(self) -> Path:
|
|
@@ -766,9 +777,10 @@ class TPCHDataGenerator(CompressionMixin, CloudStorageGeneratorMixin, VerbosityM
|
|
|
766
777
|
|
|
767
778
|
def _generate_local(self, output_dir: Path | None = None) -> dict[str, Path | list[Path]]:
|
|
768
779
|
"""Generate data locally (original implementation)."""
|
|
769
|
-
#
|
|
770
|
-
if not
|
|
771
|
-
|
|
780
|
+
# Trigger lazy loading of dbgen_exe, which will find precompiled binaries
|
|
781
|
+
# if sources are not available. This raises _raise_missing_dbgen() if neither
|
|
782
|
+
# sources nor precompiled binaries are found.
|
|
783
|
+
_ = self.dbgen_exe
|
|
772
784
|
|
|
773
785
|
# Use provided output directory or fall back to instance output_dir
|
|
774
786
|
target_dir = output_dir if output_dir is not None else self.output_dir
|
|
@@ -851,7 +863,8 @@ class TPCHDataGenerator(CompressionMixin, CloudStorageGeneratorMixin, VerbosityM
|
|
|
851
863
|
for table, filename in table_files.items():
|
|
852
864
|
# Check for compressed files first (regardless of current compression setting)
|
|
853
865
|
# Data may have been generated with compression even if not requested now
|
|
854
|
-
|
|
866
|
+
# Use centralized compression extensions for comprehensive coverage
|
|
867
|
+
for ext in COMPRESSION_EXTENSIONS:
|
|
855
868
|
compressed_file = target_dir / f"{filename}{ext}"
|
|
856
869
|
if compressed_file.exists():
|
|
857
870
|
existing[table] = compressed_file
|