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
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
"""Apache Iceberg Maintenance Operations Implementation.
|
|
2
|
+
|
|
3
|
+
This module implements DataFrame maintenance operations for Apache Iceberg,
|
|
4
|
+
providing full ACID compliance for TPC-H RF1/RF2 and TPC-DS maintenance testing.
|
|
5
|
+
|
|
6
|
+
Iceberg supports:
|
|
7
|
+
- INSERT: Append new data with transaction guarantees
|
|
8
|
+
- DELETE: Row-level deletes with equality/range predicates
|
|
9
|
+
- UPDATE: Row-level updates via delete + insert
|
|
10
|
+
- MERGE: Upsert operations (via Spark SQL or custom logic)
|
|
11
|
+
|
|
12
|
+
Iceberg provides:
|
|
13
|
+
- ACID transactions with snapshot isolation
|
|
14
|
+
- Time travel (query historical snapshots)
|
|
15
|
+
- Hidden partitioning
|
|
16
|
+
- Schema evolution
|
|
17
|
+
- Row-level deletes and updates
|
|
18
|
+
|
|
19
|
+
Note:
|
|
20
|
+
This implementation uses pyiceberg for local/REST catalog operations.
|
|
21
|
+
For production Spark/Trino workloads, use the native connectors.
|
|
22
|
+
|
|
23
|
+
Copyright 2026 Joe Harris / BenchBox Project
|
|
24
|
+
|
|
25
|
+
Licensed under the MIT License. See LICENSE file in the project root for details.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
import logging
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
from typing import TYPE_CHECKING, Any
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
import pyiceberg
|
|
36
|
+
from pyiceberg.catalog import Catalog, load_catalog
|
|
37
|
+
from pyiceberg.expressions import (
|
|
38
|
+
AlwaysTrue,
|
|
39
|
+
EqualTo,
|
|
40
|
+
GreaterThan,
|
|
41
|
+
GreaterThanOrEqual,
|
|
42
|
+
LessThan,
|
|
43
|
+
LessThanOrEqual,
|
|
44
|
+
NotEqualTo,
|
|
45
|
+
)
|
|
46
|
+
from pyiceberg.table import Table
|
|
47
|
+
|
|
48
|
+
ICEBERG_AVAILABLE = True
|
|
49
|
+
except ImportError:
|
|
50
|
+
pyiceberg = None # type: ignore[assignment]
|
|
51
|
+
Catalog = None # type: ignore[assignment, misc]
|
|
52
|
+
load_catalog = None # type: ignore[assignment]
|
|
53
|
+
Table = None # type: ignore[assignment, misc]
|
|
54
|
+
ICEBERG_AVAILABLE = False
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
import pyarrow as pa
|
|
58
|
+
|
|
59
|
+
PYARROW_AVAILABLE = True
|
|
60
|
+
except ImportError:
|
|
61
|
+
pa = None # type: ignore[assignment]
|
|
62
|
+
PYARROW_AVAILABLE = False
|
|
63
|
+
|
|
64
|
+
from benchbox.core.dataframe.maintenance_interface import (
|
|
65
|
+
ICEBERG_CAPABILITIES,
|
|
66
|
+
BaseDataFrameMaintenanceOperations,
|
|
67
|
+
DataFrameMaintenanceCapabilities,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if TYPE_CHECKING:
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
logger = logging.getLogger(__name__)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class IcebergMaintenanceOperations(BaseDataFrameMaintenanceOperations):
|
|
77
|
+
"""Apache Iceberg maintenance operations implementation.
|
|
78
|
+
|
|
79
|
+
Implements full ACID maintenance operations using pyiceberg:
|
|
80
|
+
- INSERT: Append with transaction guarantees
|
|
81
|
+
- DELETE: Row-level deletes using expressions
|
|
82
|
+
- UPDATE: Row-level updates (delete + insert pattern)
|
|
83
|
+
- MERGE: Upsert operations
|
|
84
|
+
|
|
85
|
+
Iceberg provides snapshot isolation and optimistic concurrency,
|
|
86
|
+
making it suitable for TPC-H and TPC-DS maintenance tests.
|
|
87
|
+
|
|
88
|
+
Example:
|
|
89
|
+
ops = IcebergMaintenanceOperations(
|
|
90
|
+
catalog_name="local",
|
|
91
|
+
catalog_config={"type": "sql", "uri": "sqlite:///iceberg.db"}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Insert new rows (transactional)
|
|
95
|
+
result = ops.insert_rows(
|
|
96
|
+
table_path="db.orders",
|
|
97
|
+
dataframe=new_orders_df,
|
|
98
|
+
mode="append"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Delete rows (row-level)
|
|
102
|
+
result = ops.delete_rows(
|
|
103
|
+
table_path="db.orders",
|
|
104
|
+
condition="order_date < '2020-01-01'"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
Note:
|
|
108
|
+
Requires pyiceberg: pip install pyiceberg
|
|
109
|
+
For production, configure appropriate catalog (Hive, REST, Glue, etc.)
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
def __init__(
|
|
113
|
+
self,
|
|
114
|
+
catalog_name: str = "default",
|
|
115
|
+
catalog_config: dict[str, Any] | None = None,
|
|
116
|
+
working_dir: str | Path | None = None,
|
|
117
|
+
) -> None:
|
|
118
|
+
"""Initialize Iceberg maintenance operations.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
catalog_name: Name of the Iceberg catalog
|
|
122
|
+
catalog_config: Catalog configuration dict. If None, uses in-memory catalog.
|
|
123
|
+
working_dir: Optional working directory for warehouse
|
|
124
|
+
|
|
125
|
+
Raises:
|
|
126
|
+
ImportError: If pyiceberg is not installed
|
|
127
|
+
"""
|
|
128
|
+
super().__init__()
|
|
129
|
+
|
|
130
|
+
if not ICEBERG_AVAILABLE:
|
|
131
|
+
raise ImportError(
|
|
132
|
+
"pyiceberg is not installed. Install with: pip install pyiceberg\n"
|
|
133
|
+
"For TPC-H/TPC-DS maintenance tests with Iceberg, install:\n"
|
|
134
|
+
"pip install 'benchbox[iceberg]'"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
if not PYARROW_AVAILABLE:
|
|
138
|
+
raise ImportError(
|
|
139
|
+
"PyArrow is not installed. Install with: pip install pyarrow\n"
|
|
140
|
+
"PyArrow is required for Iceberg operations."
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
self.working_dir = Path(working_dir) if working_dir else Path.cwd() / "iceberg_warehouse"
|
|
144
|
+
self.catalog_name = catalog_name
|
|
145
|
+
self.catalog_config = catalog_config or self._default_catalog_config()
|
|
146
|
+
self._catalog: Catalog | None = None
|
|
147
|
+
self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
|
|
148
|
+
|
|
149
|
+
def _default_catalog_config(self) -> dict[str, Any]:
|
|
150
|
+
"""Create default in-memory/sqlite catalog config.
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
Default catalog configuration for local testing
|
|
154
|
+
"""
|
|
155
|
+
warehouse_path = str(self.working_dir / "warehouse")
|
|
156
|
+
return {
|
|
157
|
+
"type": "sql",
|
|
158
|
+
"uri": f"sqlite:///{self.working_dir}/iceberg_catalog.db",
|
|
159
|
+
"warehouse": warehouse_path,
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@property
|
|
163
|
+
def catalog(self) -> Catalog:
|
|
164
|
+
"""Get or create the Iceberg catalog.
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Configured Iceberg Catalog instance
|
|
168
|
+
"""
|
|
169
|
+
if self._catalog is None:
|
|
170
|
+
self.working_dir.mkdir(parents=True, exist_ok=True)
|
|
171
|
+
self._catalog = load_catalog(self.catalog_name, **self.catalog_config)
|
|
172
|
+
return self._catalog
|
|
173
|
+
|
|
174
|
+
def _get_capabilities(self) -> DataFrameMaintenanceCapabilities:
|
|
175
|
+
"""Return Iceberg maintenance capabilities.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
ICEBERG_CAPABILITIES (full ACID support)
|
|
179
|
+
"""
|
|
180
|
+
return ICEBERG_CAPABILITIES
|
|
181
|
+
|
|
182
|
+
# Note: _convert_to_arrow() is inherited from BaseDataFrameMaintenanceOperations
|
|
183
|
+
|
|
184
|
+
def _normalize_table_identifier(self, table_path: str) -> str:
|
|
185
|
+
"""Normalize table path to Iceberg table identifier.
|
|
186
|
+
|
|
187
|
+
Iceberg catalogs expect identifiers in the format `namespace.table_name`,
|
|
188
|
+
not filesystem paths. This method converts various input formats to a
|
|
189
|
+
proper Iceberg identifier.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
table_path: Table path or identifier (can be filesystem path or dot notation)
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
Normalized Iceberg identifier (e.g., "default.table_name")
|
|
196
|
+
"""
|
|
197
|
+
# Check if it's already a valid Iceberg identifier (namespace.table)
|
|
198
|
+
# but not a filesystem path with dots
|
|
199
|
+
if "." in table_path and "/" not in table_path and "\\" not in table_path:
|
|
200
|
+
return table_path
|
|
201
|
+
|
|
202
|
+
# Extract table name from filesystem path
|
|
203
|
+
path = Path(table_path)
|
|
204
|
+
table_name = path.name
|
|
205
|
+
|
|
206
|
+
# Clean up the table name (remove special characters, use only alphanumeric and underscore)
|
|
207
|
+
import re
|
|
208
|
+
|
|
209
|
+
table_name = re.sub(r"[^a-zA-Z0-9_]", "_", table_name)
|
|
210
|
+
|
|
211
|
+
return f"default.{table_name}"
|
|
212
|
+
|
|
213
|
+
def _get_or_create_table(
|
|
214
|
+
self,
|
|
215
|
+
table_identifier: str,
|
|
216
|
+
schema: Any,
|
|
217
|
+
partition_columns: list[str] | None = None,
|
|
218
|
+
) -> Table:
|
|
219
|
+
"""Get existing table or create new one.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
table_identifier: Table identifier (namespace.table_name)
|
|
223
|
+
schema: PyArrow schema for table creation
|
|
224
|
+
partition_columns: Optional partition columns
|
|
225
|
+
|
|
226
|
+
Returns:
|
|
227
|
+
Iceberg Table instance
|
|
228
|
+
"""
|
|
229
|
+
# Normalize the identifier
|
|
230
|
+
normalized_id = self._normalize_table_identifier(table_identifier)
|
|
231
|
+
|
|
232
|
+
try:
|
|
233
|
+
return self.catalog.load_table(normalized_id)
|
|
234
|
+
except Exception:
|
|
235
|
+
# Table doesn't exist, create it
|
|
236
|
+
self.logger.info(f"Creating new Iceberg table: {normalized_id}")
|
|
237
|
+
|
|
238
|
+
# Parse namespace from normalized identifier
|
|
239
|
+
if "." in normalized_id:
|
|
240
|
+
namespace, _ = normalized_id.rsplit(".", 1)
|
|
241
|
+
else:
|
|
242
|
+
namespace = "default"
|
|
243
|
+
|
|
244
|
+
# Ensure namespace exists
|
|
245
|
+
try:
|
|
246
|
+
self.catalog.create_namespace(namespace)
|
|
247
|
+
except Exception:
|
|
248
|
+
pass # Namespace may already exist
|
|
249
|
+
|
|
250
|
+
# Create table
|
|
251
|
+
return self.catalog.create_table(
|
|
252
|
+
identifier=normalized_id,
|
|
253
|
+
schema=schema,
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def _do_insert(
|
|
257
|
+
self,
|
|
258
|
+
table_path: Path | str,
|
|
259
|
+
dataframe: Any,
|
|
260
|
+
partition_columns: list[str] | None,
|
|
261
|
+
mode: str,
|
|
262
|
+
) -> int:
|
|
263
|
+
"""Insert rows using Iceberg append.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
table_path: Table identifier (namespace.table_name) or path
|
|
267
|
+
dataframe: DataFrame containing rows to insert
|
|
268
|
+
partition_columns: Columns to partition by (used for table creation)
|
|
269
|
+
mode: Write mode ("append" or "overwrite")
|
|
270
|
+
|
|
271
|
+
Returns:
|
|
272
|
+
Number of rows inserted
|
|
273
|
+
"""
|
|
274
|
+
table_identifier = str(table_path)
|
|
275
|
+
|
|
276
|
+
# Convert to PyArrow
|
|
277
|
+
arrow_table = self._convert_to_arrow(dataframe)
|
|
278
|
+
row_count = arrow_table.num_rows
|
|
279
|
+
|
|
280
|
+
if row_count == 0:
|
|
281
|
+
self.logger.info("No rows to insert")
|
|
282
|
+
return 0
|
|
283
|
+
|
|
284
|
+
# Get or create table
|
|
285
|
+
iceberg_table = self._get_or_create_table(
|
|
286
|
+
table_identifier,
|
|
287
|
+
arrow_table.schema,
|
|
288
|
+
partition_columns,
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
# Append data
|
|
292
|
+
if mode == "overwrite":
|
|
293
|
+
iceberg_table.overwrite(arrow_table)
|
|
294
|
+
else:
|
|
295
|
+
iceberg_table.append(arrow_table)
|
|
296
|
+
|
|
297
|
+
self.logger.info(f"Inserted {row_count} rows to Iceberg table {table_identifier}")
|
|
298
|
+
return row_count
|
|
299
|
+
|
|
300
|
+
def _parse_condition(self, condition: str) -> Any:
|
|
301
|
+
"""Parse SQL-like condition into Iceberg expression.
|
|
302
|
+
|
|
303
|
+
This is a simplified parser for common conditions.
|
|
304
|
+
For complex conditions, use the expression API directly.
|
|
305
|
+
|
|
306
|
+
Args:
|
|
307
|
+
condition: SQL-like condition string
|
|
308
|
+
|
|
309
|
+
Returns:
|
|
310
|
+
Iceberg expression
|
|
311
|
+
|
|
312
|
+
Supported formats:
|
|
313
|
+
- "column = value" or "column = 'value'"
|
|
314
|
+
- "column > value"
|
|
315
|
+
- "column < value"
|
|
316
|
+
- "column >= value"
|
|
317
|
+
- "column <= value"
|
|
318
|
+
- "column != value"
|
|
319
|
+
"""
|
|
320
|
+
condition = condition.strip()
|
|
321
|
+
|
|
322
|
+
# Try to parse simple conditions
|
|
323
|
+
operators = [
|
|
324
|
+
(">=", GreaterThanOrEqual),
|
|
325
|
+
("<=", LessThanOrEqual),
|
|
326
|
+
("!=", NotEqualTo),
|
|
327
|
+
("<>", NotEqualTo),
|
|
328
|
+
("=", EqualTo),
|
|
329
|
+
(">", GreaterThan),
|
|
330
|
+
("<", LessThan),
|
|
331
|
+
]
|
|
332
|
+
|
|
333
|
+
for op_str, op_class in operators:
|
|
334
|
+
if op_str in condition:
|
|
335
|
+
parts = condition.split(op_str, 1)
|
|
336
|
+
if len(parts) == 2:
|
|
337
|
+
column = parts[0].strip()
|
|
338
|
+
value = parts[1].strip()
|
|
339
|
+
|
|
340
|
+
# Remove quotes from string values
|
|
341
|
+
if (value.startswith("'") and value.endswith("'")) or (
|
|
342
|
+
value.startswith('"') and value.endswith('"')
|
|
343
|
+
):
|
|
344
|
+
value = value[1:-1]
|
|
345
|
+
else:
|
|
346
|
+
# Try to convert to number
|
|
347
|
+
try:
|
|
348
|
+
if "." in value:
|
|
349
|
+
value = float(value)
|
|
350
|
+
else:
|
|
351
|
+
value = int(value)
|
|
352
|
+
except ValueError:
|
|
353
|
+
pass # Keep as string
|
|
354
|
+
|
|
355
|
+
return op_class(column, value)
|
|
356
|
+
|
|
357
|
+
# If we can't parse, log warning and return AlwaysTrue
|
|
358
|
+
# (delete all is safer than failing silently)
|
|
359
|
+
self.logger.warning(f"Could not parse condition '{condition}', using AlwaysTrue")
|
|
360
|
+
return AlwaysTrue()
|
|
361
|
+
|
|
362
|
+
def _do_delete(
|
|
363
|
+
self,
|
|
364
|
+
table_path: Path | str,
|
|
365
|
+
condition: str | Any,
|
|
366
|
+
) -> int:
|
|
367
|
+
"""Delete rows using Iceberg row-level delete.
|
|
368
|
+
|
|
369
|
+
Args:
|
|
370
|
+
table_path: Table identifier (namespace.table_name)
|
|
371
|
+
condition: Delete condition (SQL-like string or Iceberg expression)
|
|
372
|
+
|
|
373
|
+
Returns:
|
|
374
|
+
Number of rows deleted
|
|
375
|
+
"""
|
|
376
|
+
table_identifier = self._normalize_table_identifier(str(table_path))
|
|
377
|
+
|
|
378
|
+
try:
|
|
379
|
+
iceberg_table = self.catalog.load_table(table_identifier)
|
|
380
|
+
except Exception as e:
|
|
381
|
+
self.logger.warning(f"Could not load Iceberg table {table_identifier}: {e}")
|
|
382
|
+
return 0
|
|
383
|
+
|
|
384
|
+
# Get row count before delete
|
|
385
|
+
scan = iceberg_table.scan()
|
|
386
|
+
rows_before = sum(1 for _ in scan.to_arrow().to_batches())
|
|
387
|
+
rows_before = iceberg_table.scan().to_arrow().num_rows
|
|
388
|
+
|
|
389
|
+
# Parse condition if string
|
|
390
|
+
if isinstance(condition, str):
|
|
391
|
+
delete_filter = self._parse_condition(condition)
|
|
392
|
+
else:
|
|
393
|
+
delete_filter = condition
|
|
394
|
+
|
|
395
|
+
# Execute delete
|
|
396
|
+
iceberg_table.delete(delete_filter=delete_filter)
|
|
397
|
+
|
|
398
|
+
# Get row count after delete
|
|
399
|
+
rows_after = iceberg_table.scan().to_arrow().num_rows
|
|
400
|
+
rows_deleted = rows_before - rows_after
|
|
401
|
+
|
|
402
|
+
self.logger.info(f"Deleted {rows_deleted} rows from Iceberg table {table_identifier}")
|
|
403
|
+
return rows_deleted
|
|
404
|
+
|
|
405
|
+
def _do_update(
|
|
406
|
+
self,
|
|
407
|
+
table_path: Path | str,
|
|
408
|
+
condition: str | Any,
|
|
409
|
+
updates: dict[str, Any],
|
|
410
|
+
) -> int:
|
|
411
|
+
"""Update rows using delete + insert pattern.
|
|
412
|
+
|
|
413
|
+
Iceberg doesn't have native UPDATE in pyiceberg, so we:
|
|
414
|
+
1. Read rows matching condition
|
|
415
|
+
2. Modify the values
|
|
416
|
+
3. Delete original rows
|
|
417
|
+
4. Insert modified rows
|
|
418
|
+
|
|
419
|
+
Args:
|
|
420
|
+
table_path: Table identifier (namespace.table_name)
|
|
421
|
+
condition: Update condition
|
|
422
|
+
updates: Column name to new value mapping
|
|
423
|
+
|
|
424
|
+
Returns:
|
|
425
|
+
Number of rows updated
|
|
426
|
+
"""
|
|
427
|
+
table_identifier = self._normalize_table_identifier(str(table_path))
|
|
428
|
+
|
|
429
|
+
try:
|
|
430
|
+
iceberg_table = self.catalog.load_table(table_identifier)
|
|
431
|
+
except Exception as e:
|
|
432
|
+
raise RuntimeError(f"Could not load Iceberg table {table_identifier}: {e}") from e
|
|
433
|
+
|
|
434
|
+
# Parse condition
|
|
435
|
+
if isinstance(condition, str):
|
|
436
|
+
update_filter = self._parse_condition(condition)
|
|
437
|
+
else:
|
|
438
|
+
update_filter = condition
|
|
439
|
+
|
|
440
|
+
# Read rows matching condition
|
|
441
|
+
matching_rows = iceberg_table.scan(row_filter=update_filter).to_arrow()
|
|
442
|
+
row_count = matching_rows.num_rows
|
|
443
|
+
|
|
444
|
+
if row_count == 0:
|
|
445
|
+
self.logger.info("No rows match update condition")
|
|
446
|
+
return 0
|
|
447
|
+
|
|
448
|
+
# Apply updates to the arrow table
|
|
449
|
+
# Convert to pandas for easier manipulation
|
|
450
|
+
df = matching_rows.to_pandas()
|
|
451
|
+
for column, value in updates.items():
|
|
452
|
+
# Handle SQL expressions like 'new_value' or literal values
|
|
453
|
+
if isinstance(value, str):
|
|
454
|
+
# Remove quotes if present
|
|
455
|
+
if (value.startswith("'") and value.endswith("'")) or (value.startswith('"') and value.endswith('"')):
|
|
456
|
+
value = value[1:-1]
|
|
457
|
+
df[column] = value
|
|
458
|
+
|
|
459
|
+
# Convert back to arrow
|
|
460
|
+
updated_arrow = pa.Table.from_pandas(df)
|
|
461
|
+
|
|
462
|
+
# Delete original rows
|
|
463
|
+
iceberg_table.delete(delete_filter=update_filter)
|
|
464
|
+
|
|
465
|
+
# Insert updated rows
|
|
466
|
+
iceberg_table.append(updated_arrow)
|
|
467
|
+
|
|
468
|
+
self.logger.info(f"Updated {row_count} rows in Iceberg table {table_identifier}")
|
|
469
|
+
return row_count
|
|
470
|
+
|
|
471
|
+
def _do_merge(
|
|
472
|
+
self,
|
|
473
|
+
table_path: Path | str,
|
|
474
|
+
source_dataframe: Any,
|
|
475
|
+
merge_condition: str | Any,
|
|
476
|
+
when_matched: dict[str, Any] | None,
|
|
477
|
+
when_not_matched: dict[str, Any] | None,
|
|
478
|
+
) -> int:
|
|
479
|
+
"""Merge rows using custom merge logic.
|
|
480
|
+
|
|
481
|
+
pyiceberg doesn't have native MERGE, so we implement it:
|
|
482
|
+
1. Read target table
|
|
483
|
+
2. Join with source on merge condition
|
|
484
|
+
3. Apply when_matched updates
|
|
485
|
+
4. Insert when_not_matched rows
|
|
486
|
+
|
|
487
|
+
Args:
|
|
488
|
+
table_path: Table identifier (namespace.table_name)
|
|
489
|
+
source_dataframe: Source DataFrame
|
|
490
|
+
merge_condition: Join condition column(s)
|
|
491
|
+
when_matched: Updates to apply when matched
|
|
492
|
+
when_not_matched: Values for inserts when not matched
|
|
493
|
+
|
|
494
|
+
Returns:
|
|
495
|
+
Number of rows affected
|
|
496
|
+
"""
|
|
497
|
+
table_identifier = self._normalize_table_identifier(str(table_path))
|
|
498
|
+
|
|
499
|
+
# Convert source to arrow
|
|
500
|
+
source_arrow = self._convert_to_arrow(source_dataframe)
|
|
501
|
+
|
|
502
|
+
try:
|
|
503
|
+
iceberg_table = self.catalog.load_table(table_identifier)
|
|
504
|
+
except Exception as e:
|
|
505
|
+
raise RuntimeError(f"Could not load Iceberg table {table_identifier}: {e}") from e
|
|
506
|
+
|
|
507
|
+
# Read current table
|
|
508
|
+
target_arrow = iceberg_table.scan().to_arrow()
|
|
509
|
+
|
|
510
|
+
# Convert to pandas for merge logic
|
|
511
|
+
target_df = target_arrow.to_pandas()
|
|
512
|
+
source_df = source_arrow.to_pandas()
|
|
513
|
+
|
|
514
|
+
# Parse merge condition to get key column(s)
|
|
515
|
+
# Expecting format like "target.id = source.id"
|
|
516
|
+
merge_key = self._parse_merge_key(merge_condition)
|
|
517
|
+
|
|
518
|
+
# Perform merge
|
|
519
|
+
rows_updated = 0
|
|
520
|
+
rows_inserted = 0
|
|
521
|
+
|
|
522
|
+
if when_matched:
|
|
523
|
+
# Find matching rows and update
|
|
524
|
+
matched_mask = target_df[merge_key].isin(source_df[merge_key])
|
|
525
|
+
for col, val in when_matched.items():
|
|
526
|
+
if isinstance(val, str) and val.startswith("source."):
|
|
527
|
+
# Reference source column
|
|
528
|
+
source_col = val[7:] # Remove "source." prefix
|
|
529
|
+
# Map source values to target
|
|
530
|
+
source_mapping = dict(zip(source_df[merge_key], source_df[source_col]))
|
|
531
|
+
target_df.loc[matched_mask, col] = target_df.loc[matched_mask, merge_key].map(source_mapping)
|
|
532
|
+
else:
|
|
533
|
+
target_df.loc[matched_mask, col] = val
|
|
534
|
+
rows_updated = matched_mask.sum()
|
|
535
|
+
|
|
536
|
+
if when_not_matched:
|
|
537
|
+
# Find non-matching source rows
|
|
538
|
+
not_matched_mask = ~source_df[merge_key].isin(target_df[merge_key])
|
|
539
|
+
new_rows = source_df[not_matched_mask]
|
|
540
|
+
rows_inserted = len(new_rows)
|
|
541
|
+
|
|
542
|
+
if rows_inserted > 0:
|
|
543
|
+
target_df = pa.concat_tables([target_df, new_rows])
|
|
544
|
+
|
|
545
|
+
# Overwrite table with merged data
|
|
546
|
+
result_arrow = pa.Table.from_pandas(target_df)
|
|
547
|
+
iceberg_table.overwrite(result_arrow)
|
|
548
|
+
|
|
549
|
+
total_affected = rows_updated + rows_inserted
|
|
550
|
+
self.logger.info(
|
|
551
|
+
f"Merged into Iceberg table {table_identifier}: {rows_updated} updated, {rows_inserted} inserted"
|
|
552
|
+
)
|
|
553
|
+
return total_affected
|
|
554
|
+
|
|
555
|
+
def _parse_merge_key(self, merge_condition: str) -> str:
|
|
556
|
+
"""Parse merge condition to extract key column.
|
|
557
|
+
|
|
558
|
+
Args:
|
|
559
|
+
merge_condition: Condition like "target.id = source.id"
|
|
560
|
+
|
|
561
|
+
Returns:
|
|
562
|
+
Key column name
|
|
563
|
+
"""
|
|
564
|
+
# Simple parsing - extract column name from "target.col = source.col"
|
|
565
|
+
condition = str(merge_condition).strip()
|
|
566
|
+
|
|
567
|
+
if "=" in condition:
|
|
568
|
+
left = condition.split("=")[0].strip()
|
|
569
|
+
# Remove alias prefix if present
|
|
570
|
+
if "." in left:
|
|
571
|
+
return left.split(".")[-1]
|
|
572
|
+
return left
|
|
573
|
+
|
|
574
|
+
# Fallback - assume it's just the column name
|
|
575
|
+
return condition
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def get_iceberg_maintenance_operations(
|
|
579
|
+
catalog_name: str = "default",
|
|
580
|
+
catalog_config: dict[str, Any] | None = None,
|
|
581
|
+
working_dir: str | Path | None = None,
|
|
582
|
+
) -> IcebergMaintenanceOperations | None:
|
|
583
|
+
"""Get Iceberg maintenance operations if pyiceberg is available.
|
|
584
|
+
|
|
585
|
+
Args:
|
|
586
|
+
catalog_name: Name of the Iceberg catalog
|
|
587
|
+
catalog_config: Catalog configuration dict
|
|
588
|
+
working_dir: Optional working directory
|
|
589
|
+
|
|
590
|
+
Returns:
|
|
591
|
+
IcebergMaintenanceOperations if pyiceberg is available, None otherwise
|
|
592
|
+
"""
|
|
593
|
+
if not ICEBERG_AVAILABLE:
|
|
594
|
+
logger.debug("Iceberg maintenance not available (pyiceberg not installed)")
|
|
595
|
+
return None
|
|
596
|
+
|
|
597
|
+
if not PYARROW_AVAILABLE:
|
|
598
|
+
logger.debug("Iceberg maintenance not available (pyarrow not installed)")
|
|
599
|
+
return None
|
|
600
|
+
|
|
601
|
+
return IcebergMaintenanceOperations(
|
|
602
|
+
catalog_name=catalog_name,
|
|
603
|
+
catalog_config=catalog_config,
|
|
604
|
+
working_dir=working_dir,
|
|
605
|
+
)
|
|
@@ -126,6 +126,7 @@ from benchbox.core.dataframe.tuning import DataFrameTuningConfiguration # noqa:
|
|
|
126
126
|
from benchbox.platforms.dataframe.pandas_family import ( # noqa: E402
|
|
127
127
|
PandasFamilyAdapter,
|
|
128
128
|
)
|
|
129
|
+
from benchbox.utils.file_format import is_tpc_format # noqa: E402
|
|
129
130
|
|
|
130
131
|
logger = logging.getLogger(__name__)
|
|
131
132
|
|
|
@@ -291,9 +292,8 @@ class ModinDataFrameAdapter(PandasFamilyAdapter[ModinDF]):
|
|
|
291
292
|
if names:
|
|
292
293
|
read_kwargs["names"] = names
|
|
293
294
|
|
|
294
|
-
# Handle
|
|
295
|
-
|
|
296
|
-
if path_str.endswith(".tbl") and names:
|
|
295
|
+
# Handle TPC format files (.tbl, .dat) with trailing delimiter
|
|
296
|
+
if is_tpc_format(path) and names:
|
|
297
297
|
# TPC files have trailing delimiter
|
|
298
298
|
extended_names = names + ["_trailing_"]
|
|
299
299
|
read_kwargs["names"] = extended_names
|
|
@@ -45,6 +45,7 @@ from benchbox.core.dataframe.tuning import DataFrameTuningConfiguration
|
|
|
45
45
|
from benchbox.platforms.dataframe.pandas_family import (
|
|
46
46
|
PandasFamilyAdapter,
|
|
47
47
|
)
|
|
48
|
+
from benchbox.utils.file_format import is_tpc_format
|
|
48
49
|
|
|
49
50
|
logger = logging.getLogger(__name__)
|
|
50
51
|
|
|
@@ -226,9 +227,8 @@ class PandasDataFrameAdapter(PandasFamilyAdapter[PandasDF]):
|
|
|
226
227
|
if names:
|
|
227
228
|
read_kwargs["names"] = names
|
|
228
229
|
|
|
229
|
-
# Handle
|
|
230
|
-
|
|
231
|
-
if path_str.endswith(".tbl") and names:
|
|
230
|
+
# Handle TPC format files (.tbl, .dat) with trailing delimiter
|
|
231
|
+
if is_tpc_format(path) and names:
|
|
232
232
|
# TPC files have trailing delimiter
|
|
233
233
|
extended_names = names + ["_trailing_"]
|
|
234
234
|
read_kwargs["names"] = extended_names
|