From 3fd9baf0b3382ff888e4ff1ccf3ce99d23228010 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Mon, 14 Sep 2026 15:17:10 +0000 Subject: [PATCH 1/2] Stop DuckDB merging Vortex scans that have different pushdown DuckDB's common-subplan optimizer keys a scan on its serialized form. The Vortex table function keeps pushed-down filters, projections and aggregates in its FFI bind data, which has no serializer, so two scans of the same file with different pushed-down filters serialized identically and were merged into one shared CTE, handing one branch the other's rows. Parquet is unaffected because its filters live in `table_filters`, which are serialized. Setting `verify_serialization = false` is how DuckDB expects a function with opaque bind data to opt out of plan serialization, and therefore of subplan merging. TPC-DS q28 is what surfaced this: its six quantity buckets all returned the fifth bucket's average. The TPC-H q11 DuckDB plan is regenerated: its scalar subquery is no longer folded into a shared CTE, so the plan gains the scans it used to read back through `CTE_SCAN`. Results are unchanged. Signed-off-by: Joe Isaacs Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01L57FHoJ15heJVNaqgRq7xB --- vortex-duckdb/cpp/table_function.cpp | 5 + .../slt/tpch/duckdb/plans/q11.slt.no | 466 +++++++++--------- 2 files changed, 247 insertions(+), 224 deletions(-) diff --git a/vortex-duckdb/cpp/table_function.cpp b/vortex-duckdb/cpp/table_function.cpp index 6dd0f6e9601..8f3fa978e27 100644 --- a/vortex-duckdb/cpp/table_function.cpp +++ b/vortex-duckdb/cpp/table_function.cpp @@ -188,6 +188,11 @@ duckdb_state register_table_function(DatabaseInstance &db, LogicalType parameter fn.filter_pushdown = true; fn.filter_prune = true; + // Pushed-down filters, projections and aggregates live in the FFI bind data, which has no + // serializer. DuckDB's common-subplan optimizer keys scans on their serialized form, so + // without this two scans of the same file with different pushed-down filters look identical + // and are merged into one shared CTE, returning the wrong rows for one of them. + fn.verify_serialization = false; fn.pushdown_expression = [](auto &, const auto &, Expression &expression) { return duckdb_table_function_pushdown_expression(reinterpret_cast(&expression)); diff --git a/vortex-sqllogictest/slt/tpch/duckdb/plans/q11.slt.no b/vortex-sqllogictest/slt/tpch/duckdb/plans/q11.slt.no index 4d0ea223f23..b61fa5cf34c 100644 --- a/vortex-sqllogictest/slt/tpch/duckdb/plans/q11.slt.no +++ b/vortex-sqllogictest/slt/tpch/duckdb/plans/q11.slt.no @@ -321,81 +321,43 @@ logical_opt [ "name": "PROJECTION", "children": [ { - "name": "CTE", + "name": "COMPARISON_JOIN", "children": [ { "name": "PROJECTION", "children": [ { - "name": "COMPARISON_JOIN", + "name": "AGGREGATE", "children": [ { "name": "PROJECTION", "children": [ { - "name": "READ_VORTEX", - "children": [], - "extra_info": { - "Filters": "", - "Function": "Vortex Scan", - "Estimated Cardinality": "1000" - } - } - ], - "extra_info": { - "Expressions": [ - "s_suppkey", - "s_nationkey" - ], - "Estimated Cardinality": "1000" - } - }, - { - "name": "PROJECTION", - "children": [ - { - "name": "READ_VORTEX", - "children": [], - "extra_info": { - "Filters": "($.n_name = \"GERMANY\")", - "Function": "Vortex Scan", - "Estimated Cardinality": "1" - } - } - ], - "extra_info": { - "Expressions": "n_nationkey", - "Estimated Cardinality": "1" - } - } - ], - "extra_info": { - "Join Type": "INNER", - "Conditions": "(s_nationkey = n_nationkey)", - "Estimated Cardinality": "200" - } - } - ], - "extra_info": { - "Expressions": [ - "#0", - "#1", - "#2" - ] - } - }, - { - "name": "COMPARISON_JOIN", - "children": [ - { - "name": "PROJECTION", - "children": [ - { - "name": "AGGREGATE", - "children": [ - { - "name": "PROJECTION", + "name": "COMPARISON_JOIN", "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "80000" + } + } + ], + "extra_info": { + "Expressions": [ + "ps_partkey", + "ps_suppkey", + "ps_availqty", + "ps_supplycost" + ], + "Estimated Cardinality": "80000" + } + }, { "name": "COMPARISON_JOIN", "children": [ @@ -408,77 +370,117 @@ logical_opt [ "extra_info": { "Filters": "", "Function": "Vortex Scan", - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } } ], "extra_info": { "Expressions": [ - "ps_partkey", - "ps_suppkey", - "ps_availqty", - "ps_supplycost" + "s_suppkey", + "s_nationkey" ], - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } }, { - "name": "CTE_SCAN", - "children": [], + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.n_name = \"GERMANY\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], "extra_info": { - "CTE Index": "57", - "Estimated Cardinality": "200" + "Expressions": "n_nationkey", + "Estimated Cardinality": "1" } } ], "extra_info": { "Join Type": "INNER", - "Conditions": "(ps_suppkey = s_suppkey)", - "Estimated Cardinality": "16000" + "Conditions": "(s_nationkey = n_nationkey)", + "Estimated Cardinality": "200" } } ], "extra_info": { - "Expressions": [ - "__internal_compress_integral_usmallint(#0, 1)", - "__internal_compress_integral_usmallint(#1, 1)", - "#2", - "#3", - "#4", - "#5", - "#6" - ], + "Join Type": "INNER", + "Conditions": "(ps_suppkey = s_suppkey)", "Estimated Cardinality": "16000" } } ], "extra_info": { - "Groups": "ps_partkey", - "Expressions": "sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0))))", - "Estimated Cardinality": "14501" + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_utinyint(#5, 0)", + "__internal_compress_integral_utinyint(#6, 0)" + ], + "Estimated Cardinality": "16000" } } ], "extra_info": { - "Expressions": [ - "__internal_decompress_integral_bigint(#0, 1)", - "#1" - ], + "Groups": "ps_partkey", + "Expressions": "sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0))))", "Estimated Cardinality": "14501" } - }, + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "14501" + } + }, + { + "name": "PROJECTION", + "children": [ { - "name": "PROJECTION", + "name": "AGGREGATE", "children": [ { - "name": "AGGREGATE", + "name": "PROJECTION", "children": [ { - "name": "PROJECTION", + "name": "AGGREGATE", "children": [ { - "name": "AGGREGATE", + "name": "COMPARISON_JOIN", "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "80000" + } + } + ], + "extra_info": { + "Expressions": [ + "ps_suppkey", + "ps_availqty", + "ps_supplycost" + ], + "Estimated Cardinality": "80000" + } + }, { "name": "COMPARISON_JOIN", "children": [ @@ -491,77 +493,87 @@ logical_opt [ "extra_info": { "Filters": "", "Function": "Vortex Scan", - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } } ], "extra_info": { "Expressions": [ - "ps_suppkey", - "ps_availqty", - "ps_supplycost" + "s_suppkey", + "s_nationkey" ], - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } }, { - "name": "CTE_SCAN", - "children": [], + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.n_name = \"GERMANY\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], "extra_info": { - "CTE Index": "57", - "Estimated Cardinality": "200" + "Expressions": "n_nationkey", + "Estimated Cardinality": "1" } } ], "extra_info": { "Join Type": "INNER", - "Conditions": "(ps_suppkey = s_suppkey)", - "Estimated Cardinality": "16000" + "Conditions": "(s_nationkey = n_nationkey)", + "Estimated Cardinality": "200" } } ], "extra_info": { - "Groups": "", - "Expressions": "sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0))))", - "Estimated Cardinality": "1" + "Join Type": "INNER", + "Conditions": "(ps_suppkey = s_suppkey)", + "Estimated Cardinality": "16000" } } ], "extra_info": { - "Expressions": "(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) * 0.0001)", + "Groups": "", + "Expressions": "sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0))))", "Estimated Cardinality": "1" } } ], "extra_info": { - "Groups": "", - "Expressions": [ - "\"first\"(#0)", - "count_star()" - ], + "Expressions": "(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) * 0.0001)", "Estimated Cardinality": "1" } } ], "extra_info": { + "Groups": "", "Expressions": [ - "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", - "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + "\"first\"(#0)", + "count_star()" ], "Estimated Cardinality": "1" } } ], "extra_info": { - "Join Type": "INNER", - "Conditions": "(CAST(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) AS DECIMAL(38,6)) > SUBQUERY)", - "Estimated Cardinality": "14501" + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" } } ], "extra_info": { - "CTE Name": "__common_subplan_1", - "Table Index": "57" + "Join Type": "INNER", + "Conditions": "(CAST(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) AS DECIMAL(38,6)) > SUBQUERY)", + "Estimated Cardinality": "14501" } } ], @@ -610,55 +622,37 @@ physical_plan [ "name": "PROJECTION", "children": [ { - "name": "CTE", + "name": "NESTED_LOOP_JOIN", "children": [ { - "name": "HASH_JOIN", - "children": [ - { - "name": "READ_VORTEX", - "children": [], - "extra_info": { - "Function": "Vortex Scan", - "Projections": [ - "s_suppkey", - "s_nationkey" - ], - "Estimated Cardinality": "1000" - } - }, - { - "name": "READ_VORTEX", - "children": [], - "extra_info": { - "Function": "Vortex Scan", - "Filters": "n_name='GERMANY'", - "Projections": "n_nationkey", - "Estimated Cardinality": "1" - } - } - ], - "extra_info": { - "Join Type": "INNER", - "Conditions": "s_nationkey = n_nationkey", - "Estimated Cardinality": "200" - } - }, - { - "name": "NESTED_LOOP_JOIN", + "name": "PROJECTION", "children": [ { - "name": "PROJECTION", + "name": "HASH_GROUP_BY", "children": [ { - "name": "HASH_GROUP_BY", + "name": "PROJECTION", "children": [ { "name": "PROJECTION", "children": [ { - "name": "PROJECTION", + "name": "HASH_JOIN", "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ps_partkey", + "ps_suppkey", + "ps_availqty", + "ps_supplycost" + ], + "Estimated Cardinality": "80000" + } + }, { "name": "HASH_JOIN", "children": [ @@ -668,86 +662,109 @@ physical_plan [ "extra_info": { "Function": "Vortex Scan", "Projections": [ - "ps_partkey", - "ps_suppkey", - "ps_availqty", - "ps_supplycost" + "s_suppkey", + "s_nationkey" ], - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } }, { - "name": "CTE_SCAN", + "name": "READ_VORTEX", "children": [], "extra_info": { - "CTE Index": "57", - "Estimated Cardinality": "200" + "Function": "Vortex Scan", + "Filters": "n_name='GERMANY'", + "Projections": "n_nationkey", + "Estimated Cardinality": "1" } } ], "extra_info": { "Join Type": "INNER", - "Conditions": "ps_suppkey = s_suppkey", - "Estimated Cardinality": "16000" + "Conditions": "s_nationkey = n_nationkey", + "Estimated Cardinality": "200" } } ], "extra_info": { - "Projections": [ - "__internal_compress_integral_usmallint(#0, 1)", - "__internal_compress_integral_usmallint(#1, 1)", - "#2", - "#3", - "#4", - "#5", - "#6" - ], + "Join Type": "INNER", + "Conditions": "ps_suppkey = s_suppkey", "Estimated Cardinality": "16000" } } ], "extra_info": { "Projections": [ - "ps_partkey", - "(ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))" + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_utinyint(#5, 0)", + "__internal_compress_integral_utinyint(#6, 0)" ], "Estimated Cardinality": "16000" } } ], "extra_info": { - "Groups": "#0", - "Aggregates": "sum(#1)", - "Estimated Cardinality": "14501" + "Projections": [ + "ps_partkey", + "(ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))" + ], + "Estimated Cardinality": "16000" } } ], "extra_info": { - "Projections": [ - "__internal_decompress_integral_bigint(#0, 1)", - "#1" - ], + "Groups": "#0", + "Aggregates": "sum(#1)", "Estimated Cardinality": "14501" } - }, + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "14501" + } + }, + { + "name": "PROJECTION", + "children": [ { - "name": "PROJECTION", + "name": "UNGROUPED_AGGREGATE", "children": [ { - "name": "UNGROUPED_AGGREGATE", + "name": "PROJECTION", "children": [ { "name": "PROJECTION", "children": [ { - "name": "PROJECTION", + "name": "UNGROUPED_AGGREGATE", "children": [ { - "name": "UNGROUPED_AGGREGATE", + "name": "PROJECTION", "children": [ { - "name": "PROJECTION", + "name": "HASH_JOIN", "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ps_suppkey", + "ps_availqty", + "ps_supplycost" + ], + "Estimated Cardinality": "80000" + } + }, { "name": "HASH_JOIN", "children": [ @@ -757,80 +774,81 @@ physical_plan [ "extra_info": { "Function": "Vortex Scan", "Projections": [ - "ps_suppkey", - "ps_availqty", - "ps_supplycost" + "s_suppkey", + "s_nationkey" ], - "Estimated Cardinality": "80000" + "Estimated Cardinality": "1000" } }, { - "name": "CTE_SCAN", + "name": "READ_VORTEX", "children": [], "extra_info": { - "CTE Index": "57", - "Estimated Cardinality": "200" + "Function": "Vortex Scan", + "Filters": "n_name='GERMANY'", + "Projections": "n_nationkey", + "Estimated Cardinality": "1" } } ], "extra_info": { "Join Type": "INNER", - "Conditions": "ps_suppkey = s_suppkey", - "Estimated Cardinality": "16000" + "Conditions": "s_nationkey = n_nationkey", + "Estimated Cardinality": "200" } } ], "extra_info": { - "Projections": "(ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))", + "Join Type": "INNER", + "Conditions": "ps_suppkey = s_suppkey", "Estimated Cardinality": "16000" } } ], "extra_info": { - "Aggregates": "sum(#0)" + "Projections": "(ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))", + "Estimated Cardinality": "16000" } } ], "extra_info": { - "Projections": "(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) * 0.0001)", - "Estimated Cardinality": "1" + "Aggregates": "sum(#0)" } } ], "extra_info": { - "Projections": "#0", + "Projections": "(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) * 0.0001)", "Estimated Cardinality": "1" } } ], "extra_info": { - "Aggregates": [ - "\"first\"(#0)", - "count_star()" - ] + "Projections": "#0", + "Estimated Cardinality": "1" } } ], "extra_info": { - "Projections": [ - "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", - "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" - ], - "Estimated Cardinality": "1" + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] } } ], "extra_info": { - "Join Type": "INNER", - "Conditions": "CAST(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) AS DECIMAL(38,6)) > SUBQUERY", - "Estimated Cardinality": "14501" + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" } } ], "extra_info": { - "CTE Name": "__common_subplan_1", - "Table Index": "57", - "Estimated Cardinality": "0" + "Join Type": "INNER", + "Conditions": "CAST(sum((ps_supplycost * CAST(ps_availqty AS DECIMAL(18,0)))) AS DECIMAL(38,6)) > SUBQUERY", + "Estimated Cardinality": "14501" } } ], From 6fa1cf0515a3e0e33569d379040e560d57c4fe32 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Mon, 14 Sep 2026 15:17:20 +0000 Subject: [PATCH 2/2] Add TPC-DS SLT plan tests Mirror the TPC-H and ClickBench SLT layout for TPC-DS at scale factor 0.1. `slt/tpcds/generate_data.sh` generates the 24 tables with DuckDB's tpcds extension, exports them to Parquet, converts each to Vortex, and runs `duckdb/parity.slt`, which reads every table in both formats through DuckDB and fails if any row differs. The wrapper `slt/generate_data.sh` accepts `tpcds` like the other datasets. Each engine gets `plans/q1` to `plans/q99` from the upstream queries in `vortex-bench/sql/tpcds`, run unchanged, and `tpcds.slt` asserts the EXPLAIN plans against Vortex. All 99 queries plan on both engines. Result records and the Parquet comparison follow separately, so this change is only the plans. The runner treats TPC-DS like the other generated-data suites: its tests are ignored until both fixture formats exist. Signed-off-by: Joe Isaacs Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01L57FHoJ15heJVNaqgRq7xB --- vortex-sqllogictest/README.md | 48 +- .../bin/sqllogictests-runner.rs | 7 +- vortex-sqllogictest/slt/generate_data.sh | 5 +- vortex-sqllogictest/slt/tpcds/.gitignore | 1 + .../slt/tpcds/datafusion/create.slt.no | 127 + .../slt/tpcds/datafusion/drop.slt.no | 74 + .../slt/tpcds/datafusion/plans/q1.slt.no | 93 + .../slt/tpcds/datafusion/plans/q10.slt.no | 144 + .../slt/tpcds/datafusion/plans/q11.slt.no | 194 + .../slt/tpcds/datafusion/plans/q12.slt.no | 63 + .../slt/tpcds/datafusion/plans/q13.slt.no | 93 + .../slt/tpcds/datafusion/plans/q14.slt.no | 535 ++ .../slt/tpcds/datafusion/plans/q15.slt.no | 61 + .../slt/tpcds/datafusion/plans/q16.slt.no | 84 + .../slt/tpcds/datafusion/plans/q17.slt.no | 115 + .../slt/tpcds/datafusion/plans/q18.slt.no | 111 + .../slt/tpcds/datafusion/plans/q19.slt.no | 82 + .../slt/tpcds/datafusion/plans/q2.slt.no | 157 + .../slt/tpcds/datafusion/plans/q20.slt.no | 63 + .../slt/tpcds/datafusion/plans/q21.slt.no | 73 + .../slt/tpcds/datafusion/plans/q22.slt.no | 50 + .../slt/tpcds/datafusion/plans/q23.slt.no | 300 ++ .../slt/tpcds/datafusion/plans/q24.slt.no | 164 + .../slt/tpcds/datafusion/plans/q25.slt.no | 109 + .../slt/tpcds/datafusion/plans/q26.slt.no | 68 + .../slt/tpcds/datafusion/plans/q27.slt.no | 181 + .../slt/tpcds/datafusion/plans/q28.slt.no | 161 + .../slt/tpcds/datafusion/plans/q29.slt.no | 108 + .../slt/tpcds/datafusion/plans/q3.slt.no | 52 + .../slt/tpcds/datafusion/plans/q30.slt.no | 131 + .../slt/tpcds/datafusion/plans/q31.slt.no | 234 + .../slt/tpcds/datafusion/plans/q32.slt.no | 68 + .../slt/tpcds/datafusion/plans/q33.slt.no | 191 + .../slt/tpcds/datafusion/plans/q34.slt.no | 88 + .../slt/tpcds/datafusion/plans/q35.slt.no | 137 + .../slt/tpcds/datafusion/plans/q36.slt.no | 184 + .../slt/tpcds/datafusion/plans/q37.slt.no | 62 + .../slt/tpcds/datafusion/plans/q38.slt.no | 108 + .../slt/tpcds/datafusion/plans/q39.slt.no | 144 + .../slt/tpcds/datafusion/plans/q4.slt.no | 287 + .../slt/tpcds/datafusion/plans/q40.slt.no | 67 + .../slt/tpcds/datafusion/plans/q41.slt.no | 105 + .../slt/tpcds/datafusion/plans/q42.slt.no | 51 + .../slt/tpcds/datafusion/plans/q43.slt.no | 82 + .../slt/tpcds/datafusion/plans/q44.slt.no | 147 + .../slt/tpcds/datafusion/plans/q45.slt.no | 91 + .../slt/tpcds/datafusion/plans/q46.slt.no | 103 + .../slt/tpcds/datafusion/plans/q47.slt.no | 190 + .../slt/tpcds/datafusion/plans/q48.slt.no | 79 + .../slt/tpcds/datafusion/plans/q49.slt.no | 249 + .../slt/tpcds/datafusion/plans/q5.slt.no | 228 + .../slt/tpcds/datafusion/plans/q50.slt.no | 112 + .../slt/tpcds/datafusion/plans/q51.slt.no | 122 + .../slt/tpcds/datafusion/plans/q52.slt.no | 53 + .../slt/tpcds/datafusion/plans/q53.slt.no | 94 + .../slt/tpcds/datafusion/plans/q54.slt.no | 166 + .../slt/tpcds/datafusion/plans/q55.slt.no | 49 + .../slt/tpcds/datafusion/plans/q56.slt.no | 200 + .../slt/tpcds/datafusion/plans/q57.slt.no | 183 + .../slt/tpcds/datafusion/plans/q58.slt.no | 198 + .../slt/tpcds/datafusion/plans/q59.slt.no | 159 + .../slt/tpcds/datafusion/plans/q6.slt.no | 103 + .../slt/tpcds/datafusion/plans/q60.slt.no | 194 + .../slt/tpcds/datafusion/plans/q61.slt.no | 155 + .../slt/tpcds/datafusion/plans/q62.slt.no | 89 + .../slt/tpcds/datafusion/plans/q63.slt.no | 94 + .../slt/tpcds/datafusion/plans/q64.slt.no | 402 ++ .../slt/tpcds/datafusion/plans/q65.slt.no | 101 + .../slt/tpcds/datafusion/plans/q66.slt.no | 309 ++ .../slt/tpcds/datafusion/plans/q67.slt.no | 91 + .../slt/tpcds/datafusion/plans/q68.slt.no | 101 + .../slt/tpcds/datafusion/plans/q69.slt.no | 127 + .../slt/tpcds/datafusion/plans/q7.slt.no | 68 + .../slt/tpcds/datafusion/plans/q70.slt.no | 105 + .../slt/tpcds/datafusion/plans/q71.slt.no | 112 + .../slt/tpcds/datafusion/plans/q72.slt.no | 120 + .../slt/tpcds/datafusion/plans/q73.slt.no | 87 + .../slt/tpcds/datafusion/plans/q74.slt.no | 178 + .../slt/tpcds/datafusion/plans/q75.slt.no | 270 + .../slt/tpcds/datafusion/plans/q76.slt.no | 126 + .../slt/tpcds/datafusion/plans/q77.slt.no | 252 + .../slt/tpcds/datafusion/plans/q78.slt.no | 171 + .../slt/tpcds/datafusion/plans/q79.slt.no | 85 + .../slt/tpcds/datafusion/plans/q8.slt.no | 499 ++ .../slt/tpcds/datafusion/plans/q80.slt.no | 236 + .../slt/tpcds/datafusion/plans/q81.slt.no | 140 + .../slt/tpcds/datafusion/plans/q82.slt.no | 62 + .../slt/tpcds/datafusion/plans/q83.slt.no | 203 + .../slt/tpcds/datafusion/plans/q84.slt.no | 67 + .../slt/tpcds/datafusion/plans/q85.slt.no | 121 + .../slt/tpcds/datafusion/plans/q86.slt.no | 60 + .../slt/tpcds/datafusion/plans/q87.slt.no | 108 + .../slt/tpcds/datafusion/plans/q88.slt.no | 406 ++ .../slt/tpcds/datafusion/plans/q89.slt.no | 63 + .../slt/tpcds/datafusion/plans/q9.slt.no | 227 + .../slt/tpcds/datafusion/plans/q90.slt.no | 100 + .../slt/tpcds/datafusion/plans/q91.slt.no | 95 + .../slt/tpcds/datafusion/plans/q92.slt.no | 69 + .../slt/tpcds/datafusion/plans/q93.slt.no | 53 + .../slt/tpcds/datafusion/plans/q94.slt.no | 84 + .../slt/tpcds/datafusion/plans/q95.slt.no | 111 + .../slt/tpcds/datafusion/plans/q96.slt.no | 53 + .../slt/tpcds/datafusion/plans/q97.slt.no | 87 + .../slt/tpcds/datafusion/plans/q98.slt.no | 62 + .../slt/tpcds/datafusion/plans/q99.slt.no | 88 + .../slt/tpcds/datafusion/tpcds.slt | 11 + .../slt/tpcds/duckdb/create.slt.no | 74 + .../slt/tpcds/duckdb/drop.slt.no | 74 + .../slt/tpcds/duckdb/parity.slt | 536 ++ .../slt/tpcds/duckdb/plans/q1.slt.no | 890 +++ .../slt/tpcds/duckdb/plans/q10.slt.no | 1785 ++++++ .../slt/tpcds/duckdb/plans/q11.slt.no | 1739 ++++++ .../slt/tpcds/duckdb/plans/q12.slt.no | 606 +++ .../slt/tpcds/duckdb/plans/q13.slt.no | 775 +++ .../slt/tpcds/duckdb/plans/q14.slt.no | 4778 +++++++++++++++++ .../slt/tpcds/duckdb/plans/q15.slt.no | 639 +++ .../slt/tpcds/duckdb/plans/q16.slt.no | 1051 ++++ .../slt/tpcds/duckdb/plans/q17.slt.no | 1132 ++++ .../slt/tpcds/duckdb/plans/q18.slt.no | 931 ++++ .../slt/tpcds/duckdb/plans/q19.slt.no | 867 +++ .../slt/tpcds/duckdb/plans/q2.slt.no | 1183 ++++ .../slt/tpcds/duckdb/plans/q20.slt.no | 606 +++ .../slt/tpcds/duckdb/plans/q21.slt.no | 606 +++ .../slt/tpcds/duckdb/plans/q22.slt.no | 446 ++ .../slt/tpcds/duckdb/plans/q23.slt.no | 2597 +++++++++ .../slt/tpcds/duckdb/plans/q24.slt.no | 1311 +++++ .../slt/tpcds/duckdb/plans/q25.slt.no | 1073 ++++ .../slt/tpcds/duckdb/plans/q26.slt.no | 705 +++ .../slt/tpcds/duckdb/plans/q27.slt.no | 1169 ++++ .../slt/tpcds/duckdb/plans/q28.slt.no | 1261 +++++ .../slt/tpcds/duckdb/plans/q29.slt.no | 1127 ++++ .../slt/tpcds/duckdb/plans/q3.slt.no | 525 ++ .../slt/tpcds/duckdb/plans/q30.slt.no | 1088 ++++ .../slt/tpcds/duckdb/plans/q31.slt.no | 1631 ++++++ .../slt/tpcds/duckdb/plans/q32.slt.no | 852 +++ .../slt/tpcds/duckdb/plans/q33.slt.no | 2278 ++++++++ .../slt/tpcds/duckdb/plans/q34.slt.no | 890 +++ .../slt/tpcds/duckdb/plans/q35.slt.no | 1741 ++++++ .../slt/tpcds/duckdb/plans/q36.slt.no | 1364 +++++ .../slt/tpcds/duckdb/plans/q37.slt.no | 586 ++ .../slt/tpcds/duckdb/plans/q38.slt.no | 1493 +++++ .../slt/tpcds/duckdb/plans/q39.slt.no | 969 ++++ .../slt/tpcds/duckdb/plans/q4.slt.no | 2585 +++++++++ .../slt/tpcds/duckdb/plans/q40.slt.no | 694 +++ .../slt/tpcds/duckdb/plans/q41.slt.no | 533 ++ .../slt/tpcds/duckdb/plans/q42.slt.no | 519 ++ .../slt/tpcds/duckdb/plans/q43.slt.no | 541 ++ .../slt/tpcds/duckdb/plans/q44.slt.no | 1379 +++++ .../slt/tpcds/duckdb/plans/q45.slt.no | 857 +++ .../slt/tpcds/duckdb/plans/q46.slt.no | 1022 ++++ .../slt/tpcds/duckdb/plans/q47.slt.no | 1255 +++++ .../slt/tpcds/duckdb/plans/q48.slt.no | 647 +++ .../slt/tpcds/duckdb/plans/q49.slt.no | 2323 ++++++++ .../slt/tpcds/duckdb/plans/q5.slt.no | 2392 +++++++++ .../slt/tpcds/duckdb/plans/q50.slt.no | 963 ++++ .../slt/tpcds/duckdb/plans/q51.slt.no | 1154 ++++ .../slt/tpcds/duckdb/plans/q52.slt.no | 531 ++ .../slt/tpcds/duckdb/plans/q53.slt.no | 748 +++ .../slt/tpcds/duckdb/plans/q54.slt.no | 2153 ++++++++ .../slt/tpcds/duckdb/plans/q55.slt.no | 509 ++ .../slt/tpcds/duckdb/plans/q56.slt.no | 2103 ++++++++ .../slt/tpcds/duckdb/plans/q57.slt.no | 1230 +++++ .../slt/tpcds/duckdb/plans/q58.slt.no | 2537 +++++++++ .../slt/tpcds/duckdb/plans/q59.slt.no | 1254 +++++ .../slt/tpcds/duckdb/plans/q6.slt.no | 1222 +++++ .../slt/tpcds/duckdb/plans/q60.slt.no | 2097 ++++++++ .../slt/tpcds/duckdb/plans/q61.slt.no | 1531 ++++++ .../slt/tpcds/duckdb/plans/q62.slt.no | 779 +++ .../slt/tpcds/duckdb/plans/q63.slt.no | 747 +++ .../slt/tpcds/duckdb/plans/q64.slt.no | 2893 ++++++++++ .../slt/tpcds/duckdb/plans/q65.slt.no | 1170 ++++ .../slt/tpcds/duckdb/plans/q66.slt.no | 2888 ++++++++++ .../slt/tpcds/duckdb/plans/q67.slt.no | 796 +++ .../slt/tpcds/duckdb/plans/q68.slt.no | 1031 ++++ .../slt/tpcds/duckdb/plans/q69.slt.no | 1683 ++++++ .../slt/tpcds/duckdb/plans/q7.slt.no | 694 +++ .../slt/tpcds/duckdb/plans/q70.slt.no | 1103 ++++ .../slt/tpcds/duckdb/plans/q71.slt.no | 1321 +++++ .../slt/tpcds/duckdb/plans/q72.slt.no | 1360 +++++ .../slt/tpcds/duckdb/plans/q73.slt.no | 881 +++ .../slt/tpcds/duckdb/plans/q74.slt.no | 1548 ++++++ .../slt/tpcds/duckdb/plans/q75.slt.no | 2177 ++++++++ .../slt/tpcds/duckdb/plans/q76.slt.no | 1361 +++++ .../slt/tpcds/duckdb/plans/q77.slt.no | 3015 +++++++++++ .../slt/tpcds/duckdb/plans/q78.slt.no | 2009 +++++++ .../slt/tpcds/duckdb/plans/q79.slt.no | 821 +++ .../slt/tpcds/duckdb/plans/q8.slt.no | 1436 +++++ .../slt/tpcds/duckdb/plans/q80.slt.no | 2711 ++++++++++ .../slt/tpcds/duckdb/plans/q81.slt.no | 1122 ++++ .../slt/tpcds/duckdb/plans/q82.slt.no | 575 ++ .../slt/tpcds/duckdb/plans/q83.slt.no | 2285 ++++++++ .../slt/tpcds/duckdb/plans/q84.slt.no | 618 +++ .../slt/tpcds/duckdb/plans/q85.slt.no | 1113 ++++ .../slt/tpcds/duckdb/plans/q86.slt.no | 572 ++ .../slt/tpcds/duckdb/plans/q87.slt.no | 1473 +++++ .../slt/tpcds/duckdb/plans/q88.slt.no | 3516 ++++++++++++ .../slt/tpcds/duckdb/plans/q89.slt.no | 856 +++ .../slt/tpcds/duckdb/plans/q9.slt.no | 3713 +++++++++++++ .../slt/tpcds/duckdb/plans/q90.slt.no | 929 ++++ .../slt/tpcds/duckdb/plans/q91.slt.no | 857 +++ .../slt/tpcds/duckdb/plans/q92.slt.no | 865 +++ .../slt/tpcds/duckdb/plans/q93.slt.no | 482 ++ .../slt/tpcds/duckdb/plans/q94.slt.no | 1027 ++++ .../slt/tpcds/duckdb/plans/q95.slt.no | 1142 ++++ .../slt/tpcds/duckdb/plans/q96.slt.no | 446 ++ .../slt/tpcds/duckdb/plans/q97.slt.no | 910 ++++ .../slt/tpcds/duckdb/plans/q98.slt.no | 590 ++ .../slt/tpcds/duckdb/plans/q99.slt.no | 801 +++ .../slt/tpcds/duckdb/tpcds.slt | 14 + .../slt/tpcds/generate_data.sh | 55 + 210 files changed, 144546 insertions(+), 26 deletions(-) create mode 100644 vortex-sqllogictest/slt/tpcds/.gitignore create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/create.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/drop.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q12.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q13.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q20.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q28.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q3.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q34.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q40.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q42.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q48.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q52.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q53.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q55.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q62.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q63.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q67.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q73.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q79.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q86.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q89.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q9.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q93.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q96.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q98.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/plans/q99.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/datafusion/tpcds.slt create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/create.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/drop.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/parity.slt create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q1.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q10.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q11.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q12.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q13.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q14.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q15.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q16.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q17.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q18.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q19.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q2.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q20.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q21.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q22.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q23.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q24.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q25.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q26.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q27.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q28.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q29.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q3.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q30.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q31.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q32.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q33.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q34.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q35.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q36.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q37.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q38.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q39.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q4.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q40.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q41.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q42.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q43.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q44.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q45.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q46.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q47.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q48.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q49.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q5.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q50.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q51.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q52.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q53.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q54.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q55.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q56.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q57.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q58.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q59.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q6.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q60.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q61.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q62.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q63.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q64.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q65.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q66.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q67.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q68.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q69.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q7.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q70.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q71.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q72.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q73.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q74.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q75.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q76.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q77.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q78.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q79.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q8.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q80.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q81.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q82.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q83.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q84.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q85.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q86.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q87.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q88.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q89.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q9.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q90.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q91.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q92.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q93.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q94.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q95.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q96.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q97.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q98.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/plans/q99.slt.no create mode 100644 vortex-sqllogictest/slt/tpcds/duckdb/tpcds.slt create mode 100755 vortex-sqllogictest/slt/tpcds/generate_data.sh diff --git a/vortex-sqllogictest/README.md b/vortex-sqllogictest/README.md index 6189ceef1e8..31009ed48e3 100644 --- a/vortex-sqllogictest/README.md +++ b/vortex-sqllogictest/README.md @@ -10,9 +10,9 @@ sequentially for one engine. Each test is named `slt::::` ## Running tests -Some tests use TPC-H data at scale factor 0.1 and one shard of the partitioned ClickBench -dataset (about one million rows of `hits`). Generate both first, then run the suite with -`cargo nextest`: +Some tests use TPC-H and TPC-DS data at scale factor 0.1 and one shard of the partitioned +ClickBench dataset (about one million rows of `hits`). Generate them first, then run the suite +with `cargo nextest`: ```shell ./vortex-sqllogictest/slt/generate_data.sh @@ -22,35 +22,40 @@ cargo test -p vortex-sqllogictest --test sqllogictests ``` `generate_data.sh` accepts dataset names to generate only some of the fixtures, for example -`./vortex-sqllogictest/slt/generate_data.sh tpch` or `... clickbench`. Run it with `--help` to list -the datasets. It runs each dataset's own script, `slt/tpch/generate_data.sh` or -`slt/clickbench/generate_data.sh`, which can also be run directly. - -The generated Vortex and Parquet data lives under `slt/tpch/data/` and `slt/clickbench/data/` -(git-ignored). Both formats are required; regenerate older fixtures if they only contain Vortex -files. If either format is missing, that suite's tests are reported as **ignored**, so the rest of -the suite still runs. These `.slt` files load their tables through paths relative to the crate -root, so run the tests via `cargo nextest`/`cargo test`, which set the working directory -accordingly. - -TPC-H scripts live under `slt/tpch/datafusion/` and `slt/tpch/duckdb/`, ClickBench scripts under +`./vortex-sqllogictest/slt/generate_data.sh tpch`, `... tpcds` or `... clickbench`. Run it with +`--help` to list the datasets. It runs each dataset's own script, `slt/tpch/generate_data.sh`, +`slt/tpcds/generate_data.sh` or `slt/clickbench/generate_data.sh`, which can also be run directly. +TPC-DS is generated by DuckDB's `tpcds` extension through `uvx`. + +The generated Vortex and Parquet data lives under `slt/tpch/data/`, `slt/tpcds/data/` and +`slt/clickbench/data/` (git-ignored). Both formats are required; regenerate older fixtures if they +only contain Vortex files. If either format is missing, that suite's tests are reported as +**ignored**, so the rest of the suite still runs. These `.slt` files load their tables through +paths relative to the crate root, so run the tests via `cargo nextest`/`cargo test`, which set the +working directory accordingly. + +TPC-H scripts live under `slt/tpch/datafusion/` and `slt/tpch/duckdb/`, TPC-DS scripts under +`slt/tpcds/datafusion/` and `slt/tpcds/duckdb/`, ClickBench scripts under `slt/clickbench/datafusion/` and `slt/clickbench/duckdb/`. Each engine has its own `create.slt.no`, `results/q*.slt.no` (`q1` to `q22` for TPC-H, `q0` to `q42` for ClickBench, matching the upstream numbering), and `drop.slt.no`. Its `tpch.slt`/`clickbench.slt` runs these against Vortex and asserts EXPLAIN output from the matching `plans/q*.slt.no`. Its `parquet.slt` runs the same queries against the original Parquet fixtures and checks the same expected results. +TPC-DS asserts plans only for now: `tpcds.slt` runs `plans/q1.slt.no` to `plans/q99.slt.no` +against Vortex, without result records or a Parquet comparison. DataFusion uses external tables; DuckDB uses views over files. The `FILE_FORMAT` substitution variable selects the format in each engine's table setup. ClickBench plans explain the upstream queries unchanged. Where an upstream query leaves the order of tied rows unspecified, its result record adds tie-breaking `ORDER BY` columns so both formats -and repeated runs produce the same rows. The ClickBench generator also runs -`slt/clickbench/duckdb/parity.slt` right after converting the shard; it reads both files through -DuckDB and fails if the Parquet and Vortex data differ. After completing ClickBench DataFusion -plans, replace the byte ranges in `file_groups` with ``, as the TPC-H plans do: +and repeated runs produce the same rows. The ClickBench and TPC-DS generators also run +`slt/clickbench/duckdb/parity.slt` and `slt/tpcds/duckdb/parity.slt` right after converting their +fixtures; they read both formats through DuckDB and fail if the Parquet and Vortex data differ. +After completing ClickBench or TPC-DS DataFusion plans, replace the byte ranges in `file_groups` +with ``, as the TPC-H plans do: ```shell -sed -i -E 's/hits\.vortex:[0-9]+\.\.[0-9]+/hits.vortex:/g' vortex-sqllogictest/slt/clickbench/datafusion/plans/*.slt.no +sed -i -E 's/\.vortex:[0-9]+\.\.[0-9]+/.vortex:/g' vortex-sqllogictest/slt/{clickbench,tpcds}/datafusion/plans/*.slt.no ``` Because the harness is `libtest-mimic`-based, the standard test flags work, including @@ -123,7 +128,8 @@ engine currently produces, instead of comparing against it. This is useful after change to query results or plan formatting. ```shell -# Complete every file (generate TPC-H and ClickBench data first if you want their result files updated): +# Complete every file (generate the TPC-H, TPC-DS and ClickBench data first if you want their +# result and plan files updated): cargo test -p vortex-sqllogictest --test sqllogictests -- --complete # Complete only the files whose name matches a substring: cargo test -p vortex-sqllogictest --test sqllogictests -- --complete strings diff --git a/vortex-sqllogictest/bin/sqllogictests-runner.rs b/vortex-sqllogictest/bin/sqllogictests-runner.rs index 3c56d949633..ec8b21bf44b 100644 --- a/vortex-sqllogictest/bin/sqllogictests-runner.rs +++ b/vortex-sqllogictest/bin/sqllogictests-runner.rs @@ -173,6 +173,7 @@ fn engines_for(path: &Path) -> (bool, bool) { /// Vortex and Parquet versions both have to exist for the suite to run. const GENERATED_DATASETS: &[(&str, &str)] = &[ ("tpch", "tpch/data/lineitem"), + ("tpcds", "tpcds/data/store_sales"), ("clickbench", "clickbench/data/hits"), ]; @@ -245,9 +246,9 @@ fn main() -> anyhow::Result { let mut trials = Vec::new(); for path in files { let (run_datafusion, run_duckdb) = engines_for(&path); - // TPC-H and ClickBench trials are ignored (rather than removed) when the - // generated data is absent, so `--list` and the run summary still - // account for them. + // Generated-data trials (TPC-H, TPC-DS, ClickBench) are ignored (rather + // than removed) when the data is absent, so `--list` and the run summary + // still account for them. let ignored = missing_generated_data(&path); let name = path .strip_prefix(SLT_ROOT.as_path()) diff --git a/vortex-sqllogictest/slt/generate_data.sh b/vortex-sqllogictest/slt/generate_data.sh index 7db8dda441b..9660f5634ae 100755 --- a/vortex-sqllogictest/slt/generate_data.sh +++ b/vortex-sqllogictest/slt/generate_data.sh @@ -10,6 +10,7 @@ # # Datasets: # tpch TPC-H at scale factor 0.1. +# tpcds TPC-DS at scale factor 0.1 from DuckDB's tpcds extension. # clickbench One shard (~1M rows) of the partitioned ClickBench `hits` table. # # With no arguments every dataset is generated. @@ -17,7 +18,7 @@ set -e -o pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -ALL_DATASETS=(tpch clickbench) +ALL_DATASETS=(tpch tpcds clickbench) usage() { echo "Usage: $(basename "${BASH_SOURCE[0]}") [DATASET...]" @@ -32,7 +33,7 @@ for arg in "$@"; do usage exit 0 ;; - tpch|clickbench) + tpch|tpcds|clickbench) datasets+=("${arg}") ;; *) diff --git a/vortex-sqllogictest/slt/tpcds/.gitignore b/vortex-sqllogictest/slt/tpcds/.gitignore new file mode 100644 index 00000000000..3af0ccb687b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/.gitignore @@ -0,0 +1 @@ +/data diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/create.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/create.slt.no new file mode 100644 index 00000000000..d568efd2297 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/create.slt.no @@ -0,0 +1,127 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +# Keep fixture paths under WORK_DIR so EXPLAIN output can normalize them. +# Plans ignore byte ranges because they depend on the generated fixture sizes. +system ok +cp slt/tpcds/data/*.$FILE_FORMAT "$WORK_DIR/" + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS call_center +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/call_center.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS catalog_page +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/catalog_page.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS catalog_returns +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/catalog_returns.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS catalog_sales +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/catalog_sales.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS customer +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/customer.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS customer_address +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/customer_address.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS customer_demographics +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/customer_demographics.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS date_dim +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/date_dim.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS household_demographics +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/household_demographics.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS income_band +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/income_band.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS inventory +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/inventory.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS item +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/item.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS promotion +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/promotion.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS reason +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/reason.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS ship_mode +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/ship_mode.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS store +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/store.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS store_returns +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/store_returns.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS store_sales +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/store_sales.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS time_dim +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/time_dim.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS warehouse +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/warehouse.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS web_page +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/web_page.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS web_returns +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/web_returns.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS web_sales +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/web_sales.${FILE_FORMAT}'; + +statement ok +CREATE EXTERNAL TABLE IF NOT EXISTS web_site +STORED AS ${FILE_FORMAT} +LOCATION '${WORK_DIR}/web_site.${FILE_FORMAT}'; diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/drop.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/drop.slt.no new file mode 100644 index 00000000000..e65f9b56442 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/drop.slt.no @@ -0,0 +1,74 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +statement ok +DROP TABLE web_site; + +statement ok +DROP TABLE web_sales; + +statement ok +DROP TABLE web_returns; + +statement ok +DROP TABLE web_page; + +statement ok +DROP TABLE warehouse; + +statement ok +DROP TABLE time_dim; + +statement ok +DROP TABLE store_sales; + +statement ok +DROP TABLE store_returns; + +statement ok +DROP TABLE store; + +statement ok +DROP TABLE ship_mode; + +statement ok +DROP TABLE reason; + +statement ok +DROP TABLE promotion; + +statement ok +DROP TABLE item; + +statement ok +DROP TABLE inventory; + +statement ok +DROP TABLE income_band; + +statement ok +DROP TABLE household_demographics; + +statement ok +DROP TABLE date_dim; + +statement ok +DROP TABLE customer_demographics; + +statement ok +DROP TABLE customer_address; + +statement ok +DROP TABLE customer; + +statement ok +DROP TABLE catalog_sales; + +statement ok +DROP TABLE catalog_returns; + +statement ok +DROP TABLE catalog_page; + +statement ok +DROP TABLE call_center; diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no new file mode 100644 index 00000000000..f21d55b4c0b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no @@ -0,0 +1,93 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH customer_total_return AS + (SELECT sr_customer_sk AS ctr_customer_sk, + sr_store_sk AS ctr_store_sk, + sum(sr_return_amt) AS ctr_total_return + FROM store_returns, + date_dim + WHERE sr_returned_date_sk = d_date_sk + AND d_year = 2000 + GROUP BY sr_customer_sk, + sr_store_sk) +SELECT c_customer_id +FROM customer_total_return ctr1, + store, + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk) + AND s_store_sk = ctr1.ctr_store_sk + AND s_state = 'TN' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_customer_id ASC NULLS LAST, fetch=100 +02)--Projection: customer.c_customer_id +03)----LeftSemi Join: ctr1.ctr_store_sk = __scalar_sq_1.ctr_store_sk Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) +04)------Projection: ctr1.ctr_store_sk, ctr1.ctr_total_return, customer.c_customer_id +05)--------Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk +06)----------Projection: ctr1.ctr_customer_sk, ctr1.ctr_store_sk, ctr1.ctr_total_return +07)------------Inner Join: ctr1.ctr_store_sk = store.s_store_sk +08)--------------SubqueryAlias: ctr1 +09)----------------SubqueryAlias: customer_total_return +10)------------------Projection: store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt) AS ctr_total_return +11)--------------------Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt)]] +12)----------------------Projection: store_returns.sr_customer_sk, store_returns.sr_store_sk, store_returns.sr_return_amt +13)------------------------Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk +14)--------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt] +15)--------------------------Projection: date_dim.d_date_sk +16)----------------------------Filter: date_dim.d_year = Int64(2000) +17)------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +18)--------------Projection: store.s_store_sk +19)----------------Filter: store.s_state = Utf8View("TN") +20)------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +21)----------TableScan: customer projection=[c_customer_sk, c_customer_id] +22)------SubqueryAlias: __scalar_sq_1 +23)--------Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_store_sk +24)----------Aggregate: groupBy=[[ctr2.ctr_store_sk]], aggr=[[avg(ctr2.ctr_total_return)]] +25)------------SubqueryAlias: ctr2 +26)--------------SubqueryAlias: customer_total_return +27)----------------Projection: store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt) AS ctr_total_return +28)------------------Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt)]] +29)--------------------Projection: store_returns.sr_customer_sk, store_returns.sr_store_sk, store_returns.sr_return_amt +30)----------------------Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk +31)------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt] +32)------------------------Projection: date_dim.d_date_sk +33)--------------------------Filter: date_dim.d_year = Int64(2000) +34)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +physical_plan +01)SortPreservingMergeExec: [c_customer_id@0 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ctr_store_sk@0, ctr_store_sk@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[c_customer_id@2] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_store_sk@1, ctr_total_return@2, c_customer_id@4] +06)----------CoalescePartitionsExec +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ctr_store_sk@1)], projection=[ctr_customer_sk@1, ctr_store_sk@2, ctr_total_return@3] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +09)--------------ProjectionExec: expr=[sr_customer_sk@0 as ctr_customer_sk, sr_store_sk@1 as ctr_store_sk, sum(store_returns.sr_return_amt)@2 as ctr_total_return] +10)----------------AggregateExec: mode=FinalPartitioned, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt)] +11)------------------RepartitionExec: partitioning=Hash([sr_customer_sk@0, sr_store_sk@1], 4), input_partitions=4 +12)--------------------AggregateExec: mode=Partial, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt)] +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@0)], projection=[sr_customer_sk@2, sr_store_sk@3, sr_return_amt@4] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +15)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt], file_type=vortex +16)----------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +17)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id], file_type=vortex +18)------ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_store_sk@0 as ctr_store_sk] +19)--------AggregateExec: mode=FinalPartitioned, gby=[ctr_store_sk@0 as ctr_store_sk], aggr=[avg(ctr2.ctr_total_return)] +20)----------RepartitionExec: partitioning=Hash([ctr_store_sk@0], 4), input_partitions=4 +21)------------AggregateExec: mode=Partial, gby=[ctr_store_sk@0 as ctr_store_sk], aggr=[avg(ctr2.ctr_total_return)] +22)--------------ProjectionExec: expr=[sr_store_sk@1 as ctr_store_sk, sum(store_returns.sr_return_amt)@2 as ctr_total_return] +23)----------------AggregateExec: mode=FinalPartitioned, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt)] +24)------------------RepartitionExec: partitioning=Hash([sr_customer_sk@0, sr_store_sk@1], 4), input_partitions=4 +25)--------------------AggregateExec: mode=Partial, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt)] +26)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@0)], projection=[sr_customer_sk@2, sr_store_sk@3, sr_return_amt@4] +27)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +28)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no new file mode 100644 index 00000000000..09a7a2f7fe1 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no @@ -0,0 +1,144 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3, + cd_dep_count, + count(*) cnt4, + cd_dep_employed_count, + count(*) cnt5, + cd_dep_college_count, + count(*) cnt6 +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND ca_county IN ('Rush County', + 'Toole County', + 'Jefferson County', + 'Dona Ana County', + 'La Porte County') + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3) + AND (EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3) + OR EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3)) +GROUP BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +ORDER BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +LIMIT 100; +---- +logical_plan +01)Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, customer_demographics.cd_dep_count ASC NULLS LAST, customer_demographics.cd_dep_employed_count ASC NULLS LAST, customer_demographics.cd_dep_college_count ASC NULLS LAST, fetch=100 +02)--Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(Int64(1)) AS count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(Int64(1)) AS count(*) AS cnt2, customer_demographics.cd_credit_rating, count(Int64(1)) AS count(*) AS cnt3, customer_demographics.cd_dep_count, count(Int64(1)) AS count(*) AS cnt4, customer_demographics.cd_dep_employed_count, count(Int64(1)) AS count(*) AS cnt5, customer_demographics.cd_dep_college_count, count(Int64(1)) AS count(*) AS cnt6 +03)----Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count]], aggr=[[count(Int64(1))]] +04)------Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count +05)--------Filter: __correlated_sq_2.mark OR __correlated_sq_3.mark +06)----------Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count, __correlated_sq_2.mark, __correlated_sq_3.mark +07)------------LeftMark Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk +08)--------------LeftMark Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk +09)----------------LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk +10)------------------Projection: c.c_customer_sk, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count +11)--------------------Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk +12)----------------------Projection: c.c_customer_sk, c.c_current_cdemo_sk +13)------------------------Inner Join: c.c_current_addr_sk = ca.ca_address_sk +14)--------------------------SubqueryAlias: c +15)----------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] +16)--------------------------SubqueryAlias: ca +17)----------------------------Projection: customer_address.ca_address_sk +18)------------------------------Filter: customer_address.ca_county IN ([Utf8View("Rush County"), Utf8View("Toole County"), Utf8View("Jefferson County"), Utf8View("Dona Ana County"), Utf8View("La Porte County")]) +19)--------------------------------TableScan: customer_address projection=[ca_address_sk, ca_county], partial_filters=[customer_address.ca_county IN ([Utf8View("Rush County"), Utf8View("Toole County"), Utf8View("Jefferson County"), Utf8View("Dona Ana County"), Utf8View("La Porte County")])] +20)----------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] +21)------------------SubqueryAlias: __correlated_sq_1 +22)--------------------Projection: store_sales.ss_customer_sk +23)----------------------LeftSemi Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +24)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] +25)------------------------Projection: date_dim.d_date_sk +26)--------------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_moy >= Int64(1) AND date_dim.d_moy <= Int64(4) +27)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy >= Int64(1), date_dim.d_moy <= Int64(4)] +28)----------------SubqueryAlias: __correlated_sq_2 +29)------------------Projection: web_sales.ws_bill_customer_sk +30)--------------------LeftSemi Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +31)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] +32)----------------------Projection: date_dim.d_date_sk +33)------------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_moy >= Int64(1) AND date_dim.d_moy <= Int64(4) +34)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy >= Int64(1), date_dim.d_moy <= Int64(4)] +35)--------------SubqueryAlias: __correlated_sq_3 +36)----------------Projection: catalog_sales.cs_ship_customer_sk +37)------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +38)--------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] +39)--------------------Projection: date_dim.d_date_sk +40)----------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_moy >= Int64(1) AND date_dim.d_moy <= Int64(4) +41)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy >= Int64(1), date_dim.d_moy <= Int64(4)] +physical_plan +01)SortPreservingMergeExec: [cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST, cd_dep_count@8 ASC NULLS LAST, cd_dep_employed_count@10 ASC NULLS LAST, cd_dep_college_count@12 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, count(Int64(1))@8 as cnt1, cd_purchase_estimate@3 as cd_purchase_estimate, count(Int64(1))@8 as cnt2, cd_credit_rating@4 as cd_credit_rating, count(Int64(1))@8 as cnt3, cd_dep_count@5 as cd_dep_count, count(Int64(1))@8 as cnt4, cd_dep_employed_count@6 as cd_dep_employed_count, count(Int64(1))@8 as cnt5, cd_dep_college_count@7 as cd_dep_college_count, count(Int64(1))@8 as cnt6] +03)----SortExec: TopK(fetch=100), expr=[cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@3 ASC NULLS LAST, cd_credit_rating@4 ASC NULLS LAST, cd_dep_count@5 ASC NULLS LAST, cd_dep_employed_count@6 ASC NULLS LAST, cd_dep_college_count@7 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating, cd_dep_count@5 as cd_dep_count, cd_dep_employed_count@6 as cd_dep_employed_count, cd_dep_college_count@7 as cd_dep_college_count], aggr=[count(Int64(1))] +05)--------RepartitionExec: partitioning=Hash([cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4, cd_dep_count@5, cd_dep_employed_count@6, cd_dep_college_count@7], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating, cd_dep_count@5 as cd_dep_count, cd_dep_employed_count@6 as cd_dep_employed_count, cd_dep_college_count@7 as cd_dep_college_count], aggr=[count(Int64(1))] +07)------------FilterExec: mark@8 OR mark@9, projection=[cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4, cd_dep_count@5, cd_dep_employed_count@6, cd_dep_college_count@7] +08)--------------HashJoinExec: mode=CollectLeft, join_type=LeftMark, on=[(c_customer_sk@0, cs_ship_customer_sk@0)], projection=[cd_gender@1, cd_marital_status@2, cd_education_status@3, cd_purchase_estimate@4, cd_credit_rating@5, cd_dep_count@6, cd_dep_employed_count@7, cd_dep_college_count@8, mark@9, mark@10] +09)----------------CoalescePartitionsExec +10)------------------HashJoinExec: mode=CollectLeft, join_type=LeftMark, on=[(c_customer_sk@0, ws_bill_customer_sk@0)] +11)--------------------CoalescePartitionsExec +12)----------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] +13)------------------------CoalescePartitionsExec +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, cd_gender@3, cd_marital_status@4, cd_education_status@5, cd_purchase_estimate@6, cd_credit_rating@7, cd_dep_count@8, cd_dep_employed_count@9, cd_dep_college_count@10] +15)----------------------------CoalescePartitionsExec +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], projection=[c_customer_sk@1, c_current_cdemo_sk@2] +17)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_county@7 IN (SET) ([Rush County, Toole County, Jefferson County, Dona Ana County, La Porte County]) +18)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +19)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk], file_type=vortex +20)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +21)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating, cd_dep_count, cd_dep_employed_count, cd_dep_college_count], file_type=vortex +22)------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@1] +23)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_moy@8 >= 1 AND d_moy@8 <= 4 +24)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk], file_type=vortex +25)--------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_customer_sk@1] +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_moy@8 >= 1 AND d_moy@8 <= 4 +27)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk], file_type=vortex +28)----------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ship_customer_sk@1] +29)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_moy@8 >= 1 AND d_moy@8 <= 4 +30)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_ship_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no new file mode 100644 index 00000000000..54a14ec8406 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no @@ -0,0 +1,194 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(ss_ext_list_price-ss_ext_discount_amt) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(ws_ext_list_price-ws_ext_discount_amt) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name, + t_s_secyear.customer_preferred_cust_flag +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.dyear = 2001 + AND t_s_secyear.dyear = 2001+1 + AND t_w_firstyear.dyear = 2001 + AND t_w_secyear.dyear = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_w_firstyear.year_total > 0 THEN (t_w_secyear.year_total*1.0000) / t_w_firstyear.year_total + ELSE 0.0 + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN (t_s_secyear.year_total*1.0000) / t_s_firstyear.year_total + ELSE 0.0 + END +ORDER BY t_s_secyear.customer_id NULLS FIRST, + t_s_secyear.customer_first_name NULLS FIRST, + t_s_secyear.customer_last_name NULLS FIRST, + t_s_secyear.customer_preferred_cust_flag NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: t_s_secyear.customer_id ASC NULLS FIRST, t_s_secyear.customer_first_name ASC NULLS FIRST, t_s_secyear.customer_last_name ASC NULLS FIRST, t_s_secyear.customer_preferred_cust_flag ASC NULLS FIRST, fetch=100 +02)--Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag +03)----Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_w_firstyear.year_total > Decimal128(0.00,18,2) THEN CAST(t_w_secyear.year_total AS Float64) / CAST(t_w_firstyear.year_total AS Float64) ELSE Float64(0) END > CASE WHEN t_s_firstyear.year_total > Decimal128(0.00,18,2) THEN CAST(t_s_secyear.year_total AS Float64) / CAST(t_s_firstyear.year_total AS Float64) ELSE Float64(0) END +04)------Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag, t_s_secyear.year_total, t_w_firstyear.year_total +05)--------Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id +06)----------Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id +07)------------SubqueryAlias: t_s_firstyear +08)--------------SubqueryAlias: year_total +09)----------------Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total +10)------------------Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) > Decimal128(0.00,18,2) +11)--------------------Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) +12)----------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] +13)------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year +14)--------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +15)----------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price +16)------------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +17)--------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +18)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] +19)----------------------------Filter: date_dim.d_year = Int64(2001) +20)------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +21)------------SubqueryAlias: t_s_secyear +22)--------------SubqueryAlias: year_total +23)----------------Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_preferred_cust_flag AS customer_preferred_cust_flag, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total +24)------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] +25)--------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year +26)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +27)------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price +28)--------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +29)----------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +30)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] +31)------------------------Filter: date_dim.d_year = Int64(2002) +32)--------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +33)----------SubqueryAlias: t_w_firstyear +34)------------SubqueryAlias: year_total +35)--------------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total +36)----------------Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) > Decimal128(0.00,18,2) +37)------------------Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) +38)--------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] +39)----------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year +40)------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +41)--------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price +42)----------------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +43)------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +44)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] +45)--------------------------Filter: date_dim.d_year = Int64(2001) +46)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +47)------SubqueryAlias: t_w_secyear +48)--------SubqueryAlias: year_total +49)----------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total +50)------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] +51)--------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year +52)----------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +53)------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price +54)--------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +55)----------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +56)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] +57)------------------Filter: date_dim.d_year = Int64(2002) +58)--------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +physical_plan +01)SortPreservingMergeExec: [customer_id@0 ASC, customer_first_name@1 ASC, customer_last_name@2 ASC, customer_preferred_cust_flag@3 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[customer_id@0 ASC, customer_first_name@1 ASC, customer_last_name@2 ASC, customer_preferred_cust_flag@3 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > 0.00 THEN CAST(year_total@3 AS Float64) / CAST(year_total@2 AS Float64) ELSE 0 END > CASE WHEN year_total@0 > 0.00 THEN CAST(year_total@1 AS Float64) / CAST(year_total@0 AS Float64) ELSE 0 END, projection=[customer_id@2, customer_first_name@3, customer_last_name@4, customer_preferred_cust_flag@5] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@2, year_total@3, customer_id@4, customer_first_name@5, customer_last_name@6, customer_preferred_cust_flag@7, year_total@8, year_total@1] +06)----------CoalescePartitionsExec +07)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 as year_total] +08)--------------FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 > 0.00 +09)----------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] +10)------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +11)--------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ws_ext_discount_amt@10, ws_ext_list_price@11, d_year@1] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price], file_type=vortex +18)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)] +19)------------CoalescePartitionsExec +20)--------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 as year_total] +21)----------------FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 > 0.00 +22)------------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] +23)--------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +24)----------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +25)------------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +26)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ss_ext_discount_amt@10, ss_ext_list_price@11, d_year@1] +27)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +28)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] +29)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +30)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price], file_type=vortex +31)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_preferred_cust_flag@3 as customer_preferred_cust_flag, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as year_total] +32)--------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +33)----------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +34)------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +35)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ss_ext_discount_amt@10, ss_ext_list_price@11, d_year@1] +36)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +37)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] +38)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +39)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price], file_type=vortex +40)------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as year_total] +41)--------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +42)----------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +43)------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)], ordering_mode=PartiallySorted([7]) +44)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ws_ext_discount_amt@10, ws_ext_list_price@11, d_year@1] +45)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +46)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] +47)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +48)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q12.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q12.slt.no new file mode 100644 index 00000000000..bc3a093dbe9 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q12.slt.no @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + i_item_desc, + i_category, + i_class, + i_current_price, + sum(ws_ext_sales_price) AS itemrevenue, + sum(ws_ext_sales_price)*100.0000/sum(sum(ws_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM web_sales, + item, + date_dim +WHERE ws_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id, + i_item_desc, + i_category, + i_class, + i_current_price +ORDER BY i_category, + i_class, + i_item_id, + i_item_desc, + revenueratio +LIMIT 100; +---- +logical_plan +01)Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST, fetch=100 +02)--Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(web_sales.ws_ext_sales_price) AS itemrevenue, CAST(sum(web_sales.ws_ext_sales_price) AS Float64) * Float64(100) / CAST(sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS Float64) AS revenueratio +03)----WindowAggr: windowExpr=[[sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +04)------Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +05)--------Projection: web_sales.ws_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +06)----------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +07)------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +08)--------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +09)----------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] +10)----------------Filter: item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home") +11)------------------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], partial_filters=[item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home")] +12)------------Projection: date_dim.d_date_sk +13)--------------Filter: date_dim.d_date >= Date32("1999-02-22") AND date_dim.d_date <= Date32("1999-03-24") +14)----------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("1999-02-22"), date_dim.d_date <= Date32("1999-03-24")] +physical_plan +01)SortPreservingMergeExec: [i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(web_sales.ws_ext_sales_price)@5 as itemrevenue, CAST(sum(web_sales.ws_ext_sales_price)@5 AS Float64) * 100 / CAST(sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 AS Float64) as revenueratio] +04)------WindowAggExec: wdw=[sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +05)--------SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([i_class@3], 4), input_partitions=4 +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(web_sales.ws_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(web_sales.ws_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_ext_sales_price@2, i_item_id@3, i_item_desc@4, i_current_price@5, i_class@6, i_category@7] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 1999-02-22 AND d_date@2 <= 1999-03-24 +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@6, ws_ext_sales_price@8, i_item_id@1, i_item_desc@2, i_current_price@3, i_class@4, i_category@5] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], file_type=vortex, predicate: i_category@12 = Sports OR i_category@12 = Books OR i_category@12 = Home +14)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q13.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q13.slt.no new file mode 100644 index 00000000000..7963eef3183 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q13.slt.no @@ -0,0 +1,93 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT avg(ss_quantity) avg1, + avg(ss_ext_sales_price) avg2, + avg(ss_ext_wholesale_cost) avg3, + sum(ss_ext_wholesale_cost) +FROM store_sales , + store , + customer_demographics , + household_demographics , + customer_address , + date_dim +WHERE s_store_sk = ss_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 and((ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'M' + AND cd_education_status = 'Advanced Degree' + AND ss_sales_price BETWEEN 100.00 AND 150.00 + AND hd_dep_count = 3) + OR (ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND ss_sales_price BETWEEN 50.00 AND 100.00 + AND hd_dep_count = 1 ) + OR (ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'W' + AND cd_education_status = '2 yr Degree' + AND ss_sales_price BETWEEN 150.00 AND 200.00 + AND hd_dep_count = 1)) and((ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('TX', 'OH', 'TX') + AND ss_net_profit BETWEEN 100 AND 200) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('OR', 'NM', 'KY') + AND ss_net_profit BETWEEN 150 AND 300) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('VA', 'TX', 'MS') + AND ss_net_profit BETWEEN 50 AND 250)) ; +---- +logical_plan +01)Projection: avg(store_sales.ss_quantity) AS avg1, avg(store_sales.ss_ext_sales_price) AS avg2, avg(store_sales.ss_ext_wholesale_cost) AS avg3, sum(store_sales.ss_ext_wholesale_cost) +02)--Aggregate: groupBy=[[]], aggr=[[avg(CAST(store_sales.ss_quantity AS Float64)), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)]] +03)----Projection: store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost +04)------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +05)--------Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost +06)----------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("OH")) AND store_sales.ss_net_profit >= Decimal128(100.00,7,2) AND store_sales.ss_net_profit <= Decimal128(200.00,7,2) OR (customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("NM") OR customer_address.ca_state = Utf8View("KY")) AND store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(300.00,7,2) OR (customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("MS")) AND store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(250.00,7,2) +07)------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit +08)--------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") AND store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) AND household_demographics.hd_dep_count = Int64(3) OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") AND store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) AND household_demographics.hd_dep_count = Int64(1) OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2) AND household_demographics.hd_dep_count = Int64(1) +09)----------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit, customer_demographics.cd_marital_status, customer_demographics.cd_education_status +10)------------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") AND store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") AND store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2) +11)--------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit +12)----------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +13)------------------------Filter: (store_sales.ss_net_profit >= Decimal128(100.00,7,2) AND store_sales.ss_net_profit <= Decimal128(200.00,7,2) OR store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(300.00,7,2) OR store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(250.00,7,2)) AND (store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2)) +14)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_ext_sales_price, ss_ext_wholesale_cost, ss_net_profit], partial_filters=[store_sales.ss_net_profit >= Decimal128(100.00,7,2) AND store_sales.ss_net_profit <= Decimal128(200.00,7,2) OR store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(300.00,7,2) OR store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(250.00,7,2), store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2)] +15)------------------------TableScan: store projection=[s_store_sk] +16)--------------------Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") +17)----------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree")] +18)----------------Projection: household_demographics.hd_demo_sk, household_demographics.hd_dep_count +19)------------------Filter: __common_expr_2 AND (__common_expr_2 OR household_demographics.hd_dep_count = Int64(1)) +20)--------------------Projection: household_demographics.hd_dep_count = Int64(3) OR household_demographics.hd_dep_count = Int64(1) AS __common_expr_2, household_demographics.hd_demo_sk, household_demographics.hd_dep_count +21)----------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], partial_filters=[household_demographics.hd_dep_count = Int64(3) OR household_demographics.hd_dep_count = Int64(1), household_demographics.hd_dep_count = Int64(3) OR household_demographics.hd_dep_count = Int64(1) OR household_demographics.hd_dep_count = Int64(1)] +22)------------Projection: customer_address.ca_address_sk, customer_address.ca_state +23)--------------Filter: customer_address.ca_country = Utf8View("United States") AND customer_address.ca_state IN ([Utf8View("TX"), Utf8View("OH"), Utf8View("OR"), Utf8View("NM"), Utf8View("KY"), Utf8View("VA"), Utf8View("MS")]) AND (customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("NM") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("MS")) +24)----------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], partial_filters=[customer_address.ca_country = Utf8View("United States"), customer_address.ca_state IN ([Utf8View("TX"), Utf8View("OH"), Utf8View("OR"), Utf8View("NM"), Utf8View("KY"), Utf8View("VA"), Utf8View("MS")]), customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("NM") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("MS")] +25)--------Projection: date_dim.d_date_sk +26)----------Filter: date_dim.d_year = Int64(2001) +27)------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +physical_plan +01)ProjectionExec: expr=[avg(store_sales.ss_quantity)@0 as avg1, avg(store_sales.ss_ext_sales_price)@1 as avg2, avg(store_sales.ss_ext_wholesale_cost)@2 as avg3, sum(store_sales.ss_ext_wholesale_cost)@3 as sum(store_sales.ss_ext_wholesale_cost)] +02)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)] +03)----CoalescePartitionsExec +04)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)] +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_quantity@2, ss_ext_sales_price@3, ss_ext_wholesale_cost@4] +06)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 +07)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], filter=(ca_state@1 = TX OR ca_state@1 = OH) AND ss_net_profit@0 >= 100.00 AND ss_net_profit@0 <= 200.00 OR (ca_state@1 = OR OR ca_state@1 = NM OR ca_state@1 = KY) AND ss_net_profit@0 >= 150.00 AND ss_net_profit@0 <= 300.00 OR (ca_state@1 = VA OR ca_state@1 = TX OR ca_state@1 = MS) AND ss_net_profit@0 >= 50.00 AND ss_net_profit@0 <= 250.00, projection=[ss_sold_date_sk@2, ss_quantity@4, ss_ext_sales_price@5, ss_ext_wholesale_cost@6] +08)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, predicate: ca_country@10 = United States AND ca_state@8 IN (SET) ([TX, OH, OR, NM, KY, VA, MS]) AND (ca_state@8 = TX OR ca_state@8 = OH OR ca_state@8 = OR OR ca_state@8 = NM OR ca_state@8 = KY OR ca_state@8 = VA OR ca_state@8 = TX OR ca_state@8 = MS) +09)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], filter=cd_marital_status@1 = M AND cd_education_status@2 = Advanced Degree AND ss_sales_price@0 >= 100.00 AND ss_sales_price@0 <= 150.00 AND hd_dep_count@3 = 3 OR cd_marital_status@1 = S AND cd_education_status@2 = College AND ss_sales_price@0 >= 50.00 AND ss_sales_price@0 <= 100.00 AND hd_dep_count@3 = 1 OR cd_marital_status@1 = W AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= 150.00 AND ss_sales_price@0 <= 200.00 AND hd_dep_count@3 = 1, projection=[ss_sold_date_sk@2, ss_addr_sk@4, ss_quantity@5, ss_ext_sales_price@7, ss_ext_wholesale_cost@8, ss_net_profit@9] +10)--------------CoalescePartitionsExec +11)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_dep_count], file_type=vortex, predicate: (hd_dep_count@3 = 3 OR hd_dep_count@3 = 1) AND (hd_dep_count@3 = 3 OR hd_dep_count@3 = 1 OR hd_dep_count@3 = 1) +13)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@1)], filter=cd_marital_status@1 = M AND cd_education_status@2 = Advanced Degree AND ss_sales_price@0 >= 100.00 AND ss_sales_price@0 <= 150.00 OR cd_marital_status@1 = S AND cd_education_status@2 = College AND ss_sales_price@0 >= 50.00 AND ss_sales_price@0 <= 100.00 OR cd_marital_status@1 = W AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= 150.00 AND ss_sales_price@0 <= 200.00, projection=[ss_sold_date_sk@3, ss_hdemo_sk@5, ss_addr_sk@6, ss_quantity@7, ss_sales_price@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_net_profit@11, cd_marital_status@1, cd_education_status@2] +14)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex, predicate: cd_marital_status@2 = M AND cd_education_status@3 = Advanced Degree OR cd_marital_status@2 = S AND cd_education_status@3 = College OR cd_marital_status@2 = W AND cd_education_status@3 = 2 yr Degree +15)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@4)], projection=[ss_sold_date_sk@1, ss_cdemo_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_quantity@6, ss_sales_price@7, ss_ext_sales_price@8, ss_ext_wholesale_cost@9, ss_net_profit@10] +16)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +17)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_ext_sales_price, ss_ext_wholesale_cost, ss_net_profit], file_type=vortex, predicate: (ss_net_profit@22 >= 100.00 AND ss_net_profit@22 <= 200.00 OR ss_net_profit@22 >= 150.00 AND ss_net_profit@22 <= 300.00 OR ss_net_profit@22 >= 50.00 AND ss_net_profit@22 <= 250.00) AND (ss_sales_price@13 >= 100.00 AND ss_sales_price@13 <= 150.00 OR ss_sales_price@13 >= 50.00 AND ss_sales_price@13 <= 100.00 OR ss_sales_price@13 >= 150.00 AND ss_sales_price@13 <= 200.00) diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no new file mode 100644 index 00000000000..97b54c2c80d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no @@ -0,0 +1,535 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH cross_items AS + (SELECT i_item_sk ss_item_sk + FROM item, + (SELECT iss.i_brand_id brand_id, + iss.i_class_id class_id, + iss.i_category_id category_id + FROM store_sales, + item iss, + date_dim d1 + WHERE ss_item_sk = iss.i_item_sk + AND ss_sold_date_sk = d1.d_date_sk + AND d1.d_year BETWEEN 1999 AND 1999 + 2 INTERSECT + SELECT ics.i_brand_id, + ics.i_class_id, + ics.i_category_id + FROM catalog_sales, + item ics, + date_dim d2 WHERE cs_item_sk = ics.i_item_sk + AND cs_sold_date_sk = d2.d_date_sk + AND d2.d_year BETWEEN 1999 AND 1999 + 2 INTERSECT + SELECT iws.i_brand_id, + iws.i_class_id, + iws.i_category_id + FROM web_sales, + item iws, + date_dim d3 WHERE ws_item_sk = iws.i_item_sk + AND ws_sold_date_sk = d3.d_date_sk + AND d3.d_year BETWEEN 1999 AND 1999 + 2) sq1 + WHERE i_brand_id = brand_id + AND i_class_id = class_id + AND i_category_id = category_id ), + avg_sales AS + (SELECT avg(quantity*list_price) average_sales + FROM + (SELECT ss_quantity quantity, + ss_list_price list_price + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2 + UNION ALL SELECT cs_quantity quantity, + cs_list_price list_price + FROM catalog_sales, + date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2 + UNION ALL SELECT ws_quantity quantity, + ws_list_price list_price + FROM web_sales, + date_dim + WHERE ws_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2) sq2) +SELECT channel, + i_brand_id, + i_class_id, + i_category_id, + sum(sales) AS sum_sales, + sum(number_sales) AS sum_number_sales +FROM + (SELECT 'store' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(ss_quantity*ss_list_price) sales, + count(*) number_sales + FROM store_sales, + item, + date_dim + WHERE ss_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(ss_quantity*ss_list_price) > + (SELECT average_sales + FROM avg_sales) + UNION ALL SELECT 'catalog' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(cs_quantity*cs_list_price) sales, + count(*) number_sales + FROM catalog_sales, + item, + date_dim + WHERE cs_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(cs_quantity*cs_list_price) > + (SELECT average_sales + FROM avg_sales) + UNION ALL SELECT 'web' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(ws_quantity*ws_list_price) sales, + count(*) number_sales + FROM web_sales, + item, + date_dim + WHERE ws_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(ws_quantity*ws_list_price) > + (SELECT average_sales + FROM avg_sales)) y +GROUP BY ROLLUP (channel, + i_brand_id, + i_class_id, + i_category_id) +ORDER BY channel NULLS FIRST, + i_brand_id NULLS FIRST, + i_class_id NULLS FIRST, + i_category_id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: y.channel ASC NULLS FIRST, y.i_brand_id ASC NULLS FIRST, y.i_class_id ASC NULLS FIRST, y.i_category_id ASC NULLS FIRST, fetch=100 +02)--Projection: y.channel, y.i_brand_id, y.i_class_id, y.i_category_id, sum(y.sales) AS sum_sales, sum(y.number_sales) AS sum_number_sales +03)----Aggregate: groupBy=[[ROLLUP (y.channel, y.i_brand_id, y.i_class_id, y.i_category_id)]], aggr=[[sum(y.sales), sum(y.number_sales)]] +04)------SubqueryAlias: y +05)--------Union +06)----------Projection: Utf8("store") AS channel, item.i_brand_id, item.i_class_id, item.i_category_id, sum(store_sales.ss_quantity * store_sales.ss_list_price) AS sales, count(Int64(1)) AS count(*) AS number_sales +07)------------Filter: CAST(sum(store_sales.ss_quantity * store_sales.ss_list_price) AS Decimal128(38, 6)) > () +08)--------------Subquery: +09)----------------Projection: CAST(avg_sales.average_sales AS Decimal128(38, 6)) +10)------------------SubqueryAlias: avg_sales +11)--------------------Projection: avg(sq2.quantity * sq2.list_price) AS average_sales +12)----------------------Aggregate: groupBy=[[]], aggr=[[avg(CAST(sq2.quantity AS Decimal128(20, 0)) * sq2.list_price)]] +13)------------------------SubqueryAlias: sq2 +14)--------------------------Union +15)----------------------------Projection: store_sales.ss_quantity AS quantity, store_sales.ss_list_price AS list_price +16)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +17)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_quantity, ss_list_price] +18)--------------------------------Projection: date_dim.d_date_sk +19)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +20)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +21)----------------------------Projection: catalog_sales.cs_quantity AS quantity, catalog_sales.cs_list_price AS list_price +22)------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +23)--------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_quantity, cs_list_price] +24)--------------------------------Projection: date_dim.d_date_sk +25)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +26)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +27)----------------------------Projection: web_sales.ws_quantity AS quantity, web_sales.ws_list_price AS list_price +28)------------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +29)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_quantity, ws_list_price] +30)--------------------------------Projection: date_dim.d_date_sk +31)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +32)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +33)--------------Aggregate: groupBy=[[item.i_brand_id, item.i_class_id, item.i_category_id]], aggr=[[sum(CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_list_price), count(Int64(1))]] +34)----------------Projection: store_sales.ss_quantity, store_sales.ss_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +35)------------------LeftSemi Join: store_sales.ss_item_sk = __correlated_sq_1.ss_item_sk +36)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +37)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +38)------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +39)--------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +40)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_quantity, ss_list_price] +41)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +42)------------------------Projection: date_dim.d_date_sk +43)--------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(11) +44)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(11)] +45)--------------------SubqueryAlias: __correlated_sq_1 +46)----------------------SubqueryAlias: cross_items +47)------------------------Projection: item.i_item_sk AS ss_item_sk +48)--------------------------LeftSemi Join: item.i_brand_id = sq1.brand_id, item.i_class_id = sq1.class_id, item.i_category_id = sq1.category_id +49)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +50)----------------------------SubqueryAlias: sq1 +51)------------------------------LeftSemi Join: brand_id = iws.i_brand_id, class_id = iws.i_class_id, category_id = iws.i_category_id +52)--------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +53)----------------------------------LeftSemi Join: brand_id = ics.i_brand_id, class_id = ics.i_class_id, category_id = ics.i_category_id +54)------------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +55)--------------------------------------Projection: iss.i_brand_id AS brand_id, iss.i_class_id AS class_id, iss.i_category_id AS category_id +56)----------------------------------------LeftSemi Join: store_sales.ss_sold_date_sk = d1.d_date_sk +57)------------------------------------------Projection: store_sales.ss_sold_date_sk, iss.i_brand_id, iss.i_class_id, iss.i_category_id +58)--------------------------------------------Inner Join: store_sales.ss_item_sk = iss.i_item_sk +59)----------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk] +60)----------------------------------------------SubqueryAlias: iss +61)------------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +62)------------------------------------------SubqueryAlias: d1 +63)--------------------------------------------Projection: date_dim.d_date_sk +64)----------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +65)------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +66)------------------------------------Projection: ics.i_brand_id, ics.i_class_id, ics.i_category_id +67)--------------------------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = d2.d_date_sk +68)----------------------------------------Projection: catalog_sales.cs_sold_date_sk, ics.i_brand_id, ics.i_class_id, ics.i_category_id +69)------------------------------------------Inner Join: catalog_sales.cs_item_sk = ics.i_item_sk +70)--------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk] +71)--------------------------------------------SubqueryAlias: ics +72)----------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +73)----------------------------------------SubqueryAlias: d2 +74)------------------------------------------Projection: date_dim.d_date_sk +75)--------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +76)----------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +77)--------------------------------Projection: iws.i_brand_id, iws.i_class_id, iws.i_category_id +78)----------------------------------LeftSemi Join: web_sales.ws_sold_date_sk = d3.d_date_sk +79)------------------------------------Projection: web_sales.ws_sold_date_sk, iws.i_brand_id, iws.i_class_id, iws.i_category_id +80)--------------------------------------Inner Join: web_sales.ws_item_sk = iws.i_item_sk +81)----------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk] +82)----------------------------------------SubqueryAlias: iws +83)------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +84)------------------------------------SubqueryAlias: d3 +85)--------------------------------------Projection: date_dim.d_date_sk +86)----------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +87)------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +88)----------Projection: Utf8("catalog") AS channel, item.i_brand_id, item.i_class_id, item.i_category_id, sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price) AS sales, count(Int64(1)) AS count(*) AS number_sales +89)------------Filter: CAST(sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price) AS Decimal128(38, 6)) > () +90)--------------Subquery: +91)----------------Projection: CAST(avg_sales.average_sales AS Decimal128(38, 6)) +92)------------------SubqueryAlias: avg_sales +93)--------------------Projection: avg(sq2.quantity * sq2.list_price) AS average_sales +94)----------------------Aggregate: groupBy=[[]], aggr=[[avg(CAST(sq2.quantity AS Decimal128(20, 0)) * sq2.list_price)]] +95)------------------------SubqueryAlias: sq2 +96)--------------------------Union +97)----------------------------Projection: store_sales.ss_quantity AS quantity, store_sales.ss_list_price AS list_price +98)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +99)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_quantity, ss_list_price] +100)--------------------------------Projection: date_dim.d_date_sk +101)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +102)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +103)----------------------------Projection: catalog_sales.cs_quantity AS quantity, catalog_sales.cs_list_price AS list_price +104)------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +105)--------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_quantity, cs_list_price] +106)--------------------------------Projection: date_dim.d_date_sk +107)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +108)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +109)----------------------------Projection: web_sales.ws_quantity AS quantity, web_sales.ws_list_price AS list_price +110)------------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +111)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_quantity, ws_list_price] +112)--------------------------------Projection: date_dim.d_date_sk +113)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +114)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +115)--------------Aggregate: groupBy=[[item.i_brand_id, item.i_class_id, item.i_category_id]], aggr=[[sum(CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) * catalog_sales.cs_list_price), count(Int64(1))]] +116)----------------Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +117)------------------LeftSemi Join: catalog_sales.cs_item_sk = __correlated_sq_2.ss_item_sk +118)--------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +119)----------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +120)------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +121)--------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +122)----------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_quantity, cs_list_price] +123)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +124)------------------------Projection: date_dim.d_date_sk +125)--------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(11) +126)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(11)] +127)--------------------SubqueryAlias: __correlated_sq_2 +128)----------------------SubqueryAlias: cross_items +129)------------------------Projection: item.i_item_sk AS ss_item_sk +130)--------------------------LeftSemi Join: item.i_brand_id = sq1.brand_id, item.i_class_id = sq1.class_id, item.i_category_id = sq1.category_id +131)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +132)----------------------------SubqueryAlias: sq1 +133)------------------------------LeftSemi Join: brand_id = iws.i_brand_id, class_id = iws.i_class_id, category_id = iws.i_category_id +134)--------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +135)----------------------------------LeftSemi Join: brand_id = ics.i_brand_id, class_id = ics.i_class_id, category_id = ics.i_category_id +136)------------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +137)--------------------------------------Projection: iss.i_brand_id AS brand_id, iss.i_class_id AS class_id, iss.i_category_id AS category_id +138)----------------------------------------LeftSemi Join: store_sales.ss_sold_date_sk = d1.d_date_sk +139)------------------------------------------Projection: store_sales.ss_sold_date_sk, iss.i_brand_id, iss.i_class_id, iss.i_category_id +140)--------------------------------------------Inner Join: store_sales.ss_item_sk = iss.i_item_sk +141)----------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk] +142)----------------------------------------------SubqueryAlias: iss +143)------------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +144)------------------------------------------SubqueryAlias: d1 +145)--------------------------------------------Projection: date_dim.d_date_sk +146)----------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +147)------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +148)------------------------------------Projection: ics.i_brand_id, ics.i_class_id, ics.i_category_id +149)--------------------------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = d2.d_date_sk +150)----------------------------------------Projection: catalog_sales.cs_sold_date_sk, ics.i_brand_id, ics.i_class_id, ics.i_category_id +151)------------------------------------------Inner Join: catalog_sales.cs_item_sk = ics.i_item_sk +152)--------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk] +153)--------------------------------------------SubqueryAlias: ics +154)----------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +155)----------------------------------------SubqueryAlias: d2 +156)------------------------------------------Projection: date_dim.d_date_sk +157)--------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +158)----------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +159)--------------------------------Projection: iws.i_brand_id, iws.i_class_id, iws.i_category_id +160)----------------------------------LeftSemi Join: web_sales.ws_sold_date_sk = d3.d_date_sk +161)------------------------------------Projection: web_sales.ws_sold_date_sk, iws.i_brand_id, iws.i_class_id, iws.i_category_id +162)--------------------------------------Inner Join: web_sales.ws_item_sk = iws.i_item_sk +163)----------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk] +164)----------------------------------------SubqueryAlias: iws +165)------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +166)------------------------------------SubqueryAlias: d3 +167)--------------------------------------Projection: date_dim.d_date_sk +168)----------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +169)------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +170)----------Projection: Utf8("web") AS channel, item.i_brand_id, item.i_class_id, item.i_category_id, sum(web_sales.ws_quantity * web_sales.ws_list_price) AS sales, count(Int64(1)) AS count(*) AS number_sales +171)------------Filter: CAST(sum(web_sales.ws_quantity * web_sales.ws_list_price) AS Decimal128(38, 6)) > () +172)--------------Subquery: +173)----------------Projection: CAST(avg_sales.average_sales AS Decimal128(38, 6)) +174)------------------SubqueryAlias: avg_sales +175)--------------------Projection: avg(sq2.quantity * sq2.list_price) AS average_sales +176)----------------------Aggregate: groupBy=[[]], aggr=[[avg(CAST(sq2.quantity AS Decimal128(20, 0)) * sq2.list_price)]] +177)------------------------SubqueryAlias: sq2 +178)--------------------------Union +179)----------------------------Projection: store_sales.ss_quantity AS quantity, store_sales.ss_list_price AS list_price +180)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +181)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_quantity, ss_list_price] +182)--------------------------------Projection: date_dim.d_date_sk +183)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +184)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +185)----------------------------Projection: catalog_sales.cs_quantity AS quantity, catalog_sales.cs_list_price AS list_price +186)------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +187)--------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_quantity, cs_list_price] +188)--------------------------------Projection: date_dim.d_date_sk +189)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +190)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +191)----------------------------Projection: web_sales.ws_quantity AS quantity, web_sales.ws_list_price AS list_price +192)------------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +193)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_quantity, ws_list_price] +194)--------------------------------Projection: date_dim.d_date_sk +195)----------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +196)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +197)--------------Aggregate: groupBy=[[item.i_brand_id, item.i_class_id, item.i_category_id]], aggr=[[sum(CAST(web_sales.ws_quantity AS Decimal128(20, 0)) * web_sales.ws_list_price), count(Int64(1))]] +198)----------------Projection: web_sales.ws_quantity, web_sales.ws_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +199)------------------LeftSemi Join: web_sales.ws_item_sk = __correlated_sq_3.ss_item_sk +200)--------------------Projection: web_sales.ws_item_sk, web_sales.ws_quantity, web_sales.ws_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +201)----------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +202)------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_quantity, web_sales.ws_list_price, item.i_brand_id, item.i_class_id, item.i_category_id +203)--------------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +204)----------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_quantity, ws_list_price] +205)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +206)------------------------Projection: date_dim.d_date_sk +207)--------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(11) +208)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(11)] +209)--------------------SubqueryAlias: __correlated_sq_3 +210)----------------------SubqueryAlias: cross_items +211)------------------------Projection: item.i_item_sk AS ss_item_sk +212)--------------------------LeftSemi Join: item.i_brand_id = sq1.brand_id, item.i_class_id = sq1.class_id, item.i_category_id = sq1.category_id +213)----------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +214)----------------------------SubqueryAlias: sq1 +215)------------------------------LeftSemi Join: brand_id = iws.i_brand_id, class_id = iws.i_class_id, category_id = iws.i_category_id +216)--------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +217)----------------------------------LeftSemi Join: brand_id = ics.i_brand_id, class_id = ics.i_class_id, category_id = ics.i_category_id +218)------------------------------------Aggregate: groupBy=[[brand_id, class_id, category_id]], aggr=[[]] +219)--------------------------------------Projection: iss.i_brand_id AS brand_id, iss.i_class_id AS class_id, iss.i_category_id AS category_id +220)----------------------------------------LeftSemi Join: store_sales.ss_sold_date_sk = d1.d_date_sk +221)------------------------------------------Projection: store_sales.ss_sold_date_sk, iss.i_brand_id, iss.i_class_id, iss.i_category_id +222)--------------------------------------------Inner Join: store_sales.ss_item_sk = iss.i_item_sk +223)----------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk] +224)----------------------------------------------SubqueryAlias: iss +225)------------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +226)------------------------------------------SubqueryAlias: d1 +227)--------------------------------------------Projection: date_dim.d_date_sk +228)----------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +229)------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +230)------------------------------------Projection: ics.i_brand_id, ics.i_class_id, ics.i_category_id +231)--------------------------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = d2.d_date_sk +232)----------------------------------------Projection: catalog_sales.cs_sold_date_sk, ics.i_brand_id, ics.i_class_id, ics.i_category_id +233)------------------------------------------Inner Join: catalog_sales.cs_item_sk = ics.i_item_sk +234)--------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk] +235)--------------------------------------------SubqueryAlias: ics +236)----------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +237)----------------------------------------SubqueryAlias: d2 +238)------------------------------------------Projection: date_dim.d_date_sk +239)--------------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +240)----------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +241)--------------------------------Projection: iws.i_brand_id, iws.i_class_id, iws.i_category_id +242)----------------------------------LeftSemi Join: web_sales.ws_sold_date_sk = d3.d_date_sk +243)------------------------------------Projection: web_sales.ws_sold_date_sk, iws.i_brand_id, iws.i_class_id, iws.i_category_id +244)--------------------------------------Inner Join: web_sales.ws_item_sk = iws.i_item_sk +245)----------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk] +246)----------------------------------------SubqueryAlias: iws +247)------------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id] +248)------------------------------------SubqueryAlias: d3 +249)--------------------------------------Projection: date_dim.d_date_sk +250)----------------------------------------Filter: date_dim.d_year >= Int64(1999) AND date_dim.d_year <= Int64(2001) +251)------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year >= Int64(1999), date_dim.d_year <= Int64(2001)] +physical_plan +01)ScalarSubqueryExec: subqueries=1 +02)--SortPreservingMergeExec: [channel@0 ASC, i_brand_id@1 ASC, i_class_id@2 ASC, i_category_id@3 ASC], fetch=100 +03)----SortExec: TopK(fetch=100), expr=[channel@0 ASC, i_brand_id@1 ASC, i_class_id@2 ASC, i_category_id@3 ASC], preserve_partitioning=[true] +04)------ProjectionExec: expr=[channel@0 as channel, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, sum(y.sales)@5 as sum_sales, sum(y.number_sales)@6 as sum_number_sales] +05)--------AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, __grouping_id@4 as __grouping_id], aggr=[sum(y.sales), sum(y.number_sales)] +06)----------RepartitionExec: partitioning=Hash([channel@0, i_brand_id@1, i_class_id@2, i_category_id@3, __grouping_id@4], 4), input_partitions=4 +07)------------AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as i_brand_id, NULL as i_class_id, NULL as i_category_id), (channel@0 as channel, NULL as i_brand_id, NULL as i_class_id, NULL as i_category_id), (channel@0 as channel, i_brand_id@1 as i_brand_id, NULL as i_class_id, NULL as i_category_id), (channel@0 as channel, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, NULL as i_category_id), (channel@0 as channel, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id)], aggr=[sum(y.sales), sum(y.number_sales)] +08)--------------InterleaveExec +09)----------------ProjectionExec: expr=[store as channel, i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id, sum(store_sales.ss_quantity * store_sales.ss_list_price)@3 as sales, count(Int64(1))@4 as number_sales] +10)------------------FilterExec: CAST(sum(store_sales.ss_quantity * store_sales.ss_list_price)@3 AS Decimal128(38, 6)) > scalar_subquery() +11)--------------------AggregateExec: mode=FinalPartitioned, gby=[i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id], aggr=[sum(store_sales.ss_quantity * store_sales.ss_list_price), count(Int64(1))] +12)----------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +13)------------------------AggregateExec: mode=Partial, gby=[i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id], aggr=[sum(store_sales.ss_quantity * store_sales.ss_list_price), count(Int64(1))] +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(ss_item_sk@0, ss_item_sk@0)], projection=[ss_quantity@1, ss_list_price@2, i_brand_id@3, i_class_id@4, i_category_id@5] +15)----------------------------CoalescePartitionsExec +16)------------------------------ProjectionExec: expr=[i_item_sk@0 as ss_item_sk] +17)--------------------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_brand_id@1, brand_id@0), (i_class_id@2, class_id@1), (i_category_id@3, category_id@2)], projection=[i_item_sk@0] +18)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +19)----------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +20)------------------------------------CoalescePartitionsExec +21)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +22)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +23)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +24)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +25)------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk], file_type=vortex +26)------------------------------------AggregateExec: mode=SinglePartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +27)--------------------------------------HashJoinExec: mode=Partitioned, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +28)----------------------------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +29)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +30)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +31)--------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +32)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +33)----------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk], file_type=vortex +34)----------------------------------------AggregateExec: mode=FinalPartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +35)------------------------------------------RepartitionExec: partitioning=Hash([brand_id@0, class_id@1, category_id@2], 4), input_partitions=4 +36)--------------------------------------------AggregateExec: mode=Partial, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +37)----------------------------------------------ProjectionExec: expr=[i_brand_id@0 as brand_id, i_class_id@1 as class_id, i_category_id@2 as category_id] +38)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +39)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +40)--------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +41)----------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +42)----------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk], file_type=vortex +43)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_quantity@3, ss_list_price@4, i_brand_id@5, i_class_id@6, i_category_id@7] +44)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 11 +45)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_quantity@6, ss_list_price@7, i_brand_id@1, i_class_id@2, i_category_id@3] +46)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +47)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_quantity, ss_list_price], file_type=vortex +48)----------------ProjectionExec: expr=[catalog as channel, i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id, sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price)@3 as sales, count(Int64(1))@4 as number_sales] +49)------------------FilterExec: CAST(sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price)@3 AS Decimal128(38, 6)) > scalar_subquery() +50)--------------------AggregateExec: mode=FinalPartitioned, gby=[i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id], aggr=[sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price), count(Int64(1))] +51)----------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +52)------------------------AggregateExec: mode=Partial, gby=[i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id], aggr=[sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price), count(Int64(1))] +53)--------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(ss_item_sk@0, cs_item_sk@0)], projection=[cs_quantity@1, cs_list_price@2, i_brand_id@3, i_class_id@4, i_category_id@5] +54)----------------------------CoalescePartitionsExec +55)------------------------------ProjectionExec: expr=[i_item_sk@0 as ss_item_sk] +56)--------------------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_brand_id@1, brand_id@0), (i_class_id@2, class_id@1), (i_category_id@3, category_id@2)], projection=[i_item_sk@0] +57)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +58)----------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +59)------------------------------------CoalescePartitionsExec +60)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +61)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +62)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +63)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +64)------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk], file_type=vortex +65)------------------------------------AggregateExec: mode=SinglePartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +66)--------------------------------------HashJoinExec: mode=Partitioned, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +67)----------------------------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +68)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +69)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +70)--------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +71)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +72)----------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk], file_type=vortex +73)----------------------------------------AggregateExec: mode=FinalPartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +74)------------------------------------------RepartitionExec: partitioning=Hash([brand_id@0, class_id@1, category_id@2], 4), input_partitions=4 +75)--------------------------------------------AggregateExec: mode=Partial, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +76)----------------------------------------------ProjectionExec: expr=[i_brand_id@0 as brand_id, i_class_id@1 as class_id, i_category_id@2 as category_id] +77)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +78)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +79)--------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +80)----------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +81)----------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk], file_type=vortex +82)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@2, cs_quantity@3, cs_list_price@4, i_brand_id@5, i_class_id@6, i_category_id@7] +83)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 11 +84)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@4, cs_item_sk@5, cs_quantity@6, cs_list_price@7, i_brand_id@1, i_class_id@2, i_category_id@3] +85)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +86)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_quantity, cs_list_price], file_type=vortex +87)----------------ProjectionExec: expr=[web as channel, i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id, sum(web_sales.ws_quantity * web_sales.ws_list_price)@3 as sales, count(Int64(1))@4 as number_sales] +88)------------------FilterExec: CAST(sum(web_sales.ws_quantity * web_sales.ws_list_price)@3 AS Decimal128(38, 6)) > scalar_subquery() +89)--------------------AggregateExec: mode=FinalPartitioned, gby=[i_brand_id@0 as i_brand_id, i_class_id@1 as i_class_id, i_category_id@2 as i_category_id], aggr=[sum(web_sales.ws_quantity * web_sales.ws_list_price), count(Int64(1))] +90)----------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +91)------------------------AggregateExec: mode=Partial, gby=[i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id], aggr=[sum(web_sales.ws_quantity * web_sales.ws_list_price), count(Int64(1))] +92)--------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(ss_item_sk@0, ws_item_sk@0)], projection=[ws_quantity@1, ws_list_price@2, i_brand_id@3, i_class_id@4, i_category_id@5] +93)----------------------------CoalescePartitionsExec +94)------------------------------ProjectionExec: expr=[i_item_sk@0 as ss_item_sk] +95)--------------------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_brand_id@1, brand_id@0), (i_class_id@2, class_id@1), (i_category_id@3, category_id@2)], projection=[i_item_sk@0] +96)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +97)----------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +98)------------------------------------CoalescePartitionsExec +99)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +100)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +101)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +102)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +103)------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk], file_type=vortex +104)------------------------------------AggregateExec: mode=SinglePartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +105)--------------------------------------HashJoinExec: mode=Partitioned, join_type=RightSemi, on=[(i_brand_id@0, brand_id@0), (i_class_id@1, class_id@1), (i_category_id@2, category_id@2)], NullsEqual: true +106)----------------------------------------RepartitionExec: partitioning=Hash([i_brand_id@0, i_class_id@1, i_category_id@2], 4), input_partitions=4 +107)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +108)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +109)--------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +110)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +111)----------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk], file_type=vortex +112)----------------------------------------AggregateExec: mode=FinalPartitioned, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +113)------------------------------------------RepartitionExec: partitioning=Hash([brand_id@0, class_id@1, category_id@2], 4), input_partitions=4 +114)--------------------------------------------AggregateExec: mode=Partial, gby=[brand_id@0 as brand_id, class_id@1 as class_id, category_id@2 as category_id], aggr=[] +115)----------------------------------------------ProjectionExec: expr=[i_brand_id@0 as brand_id, i_class_id@1 as class_id, i_category_id@2 as category_id] +116)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[i_brand_id@1, i_class_id@2, i_category_id@3] +117)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +118)--------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@4, i_brand_id@1, i_class_id@2, i_category_id@3] +119)----------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +120)----------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk], file_type=vortex +121)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_quantity@3, ws_list_price@4, i_brand_id@5, i_class_id@6, i_category_id@7] +122)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 11 +123)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@4, ws_item_sk@5, ws_quantity@6, ws_list_price@7, i_brand_id@1, i_class_id@2, i_category_id@3] +124)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id], file_type=vortex +125)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_quantity, ws_list_price], file_type=vortex +126)--ProjectionExec: expr=[CAST(avg(sq2.quantity * sq2.list_price)@0 AS Decimal128(38, 6)) as avg_sales.average_sales] +127)----AggregateExec: mode=Final, gby=[], aggr=[avg(sq2.quantity * sq2.list_price)] +128)------CoalescePartitionsExec +129)--------AggregateExec: mode=Partial, gby=[], aggr=[avg(sq2.quantity * sq2.list_price)] +130)----------UnionExec +131)------------ProjectionExec: expr=[ss_quantity@0 as quantity, ss_list_price@1 as list_price] +132)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_quantity@2, ss_list_price@3] +133)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +134)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_quantity, ss_list_price], file_type=vortex +135)------------ProjectionExec: expr=[cs_quantity@0 as quantity, cs_list_price@1 as list_price] +136)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_quantity@2, cs_list_price@3] +137)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +138)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_quantity, cs_list_price], file_type=vortex +139)------------ProjectionExec: expr=[ws_quantity@0 as quantity, ws_list_price@1 as list_price] +140)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_quantity@2, ws_list_price@3] +141)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 >= 1999 AND d_year@6 <= 2001 +142)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_quantity, ws_list_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no new file mode 100644 index 00000000000..1092d305b47 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT ca_zip, + sum(cs_sales_price) +FROM catalog_sales, + customer, + customer_address, + date_dim +WHERE cs_bill_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND (SUBSTRING(ca_zip, 1, 5) IN ('85669', + '86197', + '88274', + '83405', + '86475', + '85392', + '85460', + '80348', + '81792') + OR ca_state IN ('CA', + 'WA', + 'GA') + OR cs_sales_price > 500) + AND cs_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 2001 +GROUP BY ca_zip +ORDER BY ca_zip NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer_address.ca_zip ASC NULLS FIRST, fetch=100 +02)--Aggregate: groupBy=[[customer_address.ca_zip]], aggr=[[sum(catalog_sales.cs_sales_price)]] +03)----Projection: catalog_sales.cs_sales_price, customer_address.ca_zip +04)------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +05)--------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, customer_address.ca_zip +06)----------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8View("85669"), Utf8View("86197"), Utf8View("88274"), Utf8View("83405"), Utf8View("86475"), Utf8View("85392"), Utf8View("85460"), Utf8View("80348"), Utf8View("81792")]) OR customer_address.ca_state = Utf8View("CA") OR customer_address.ca_state = Utf8View("WA") OR customer_address.ca_state = Utf8View("GA") OR catalog_sales.cs_sales_price > Decimal128(500.00,7,2) +07)------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, customer.c_current_addr_sk +08)--------------Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk +09)----------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_sales_price] +10)----------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +11)------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_zip] +12)--------Projection: date_dim.d_date_sk +13)----------Filter: date_dim.d_qoy = Int64(2) AND date_dim.d_year = Int64(2001) +14)------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2001)] +physical_plan +01)SortPreservingMergeExec: [ca_zip@0 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[ca_zip@0 ASC], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[sum(catalog_sales.cs_sales_price)] +04)------RepartitionExec: partitioning=Hash([ca_zip@0], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[ca_zip@1 as ca_zip], aggr=[sum(catalog_sales.cs_sales_price)] +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_sales_price@2, ca_zip@3] +07)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_qoy@10 = 2 AND d_year@6 = 2001 +08)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], filter=substr(ca_zip@2, 1, 5) IN (SET) ([85669, 86197, 88274, 83405, 86475, 85392, 85460, 80348, 81792]) OR ca_state@1 = CA OR ca_state@1 = WA OR ca_state@1 = GA OR cs_sales_price@0 > 500.00, projection=[cs_sold_date_sk@3, cs_sales_price@4, ca_zip@2] +09)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip], file_type=vortex +10)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[cs_sold_date_sk@2, cs_sales_price@4, c_current_addr_sk@1] +11)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +12)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no new file mode 100644 index 00000000000..9d9f479d707 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no @@ -0,0 +1,84 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT count(DISTINCT cs_order_number) AS "order count", + sum(cs_ext_ship_cost) AS "total shipping cost", + sum(cs_net_profit) AS "total net profit" +FROM catalog_sales cs1, + date_dim, + customer_address, + call_center +WHERE d_date BETWEEN '2002-02-01' AND cast('2002-04-02' AS date) + AND cs1.cs_ship_date_sk = d_date_sk + AND cs1.cs_ship_addr_sk = ca_address_sk + AND ca_state = 'GA' + AND cs1.cs_call_center_sk = cc_call_center_sk + AND cc_county = 'Williamson County' + AND EXISTS + (SELECT * + FROM catalog_sales cs2 + WHERE cs1.cs_order_number = cs2.cs_order_number + AND cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk) + AND NOT EXISTS + (SELECT * + FROM catalog_returns cr1 + WHERE cs1.cs_order_number = cr1.cr_order_number) +ORDER BY count(DISTINCT cs_order_number) +LIMIT 100; +---- +logical_plan +01)Sort: order count ASC NULLS LAST, fetch=100 +02)--Projection: count(alias1) AS order count, sum(alias2) AS total shipping cost, sum(alias3) AS total net profit +03)----Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] +04)------Aggregate: groupBy=[[cs1.cs_order_number AS alias1]], aggr=[[sum(cs1.cs_ext_ship_cost) AS alias2, sum(cs1.cs_net_profit) AS alias3]] +05)--------LeftAnti Join: cs1.cs_order_number = __correlated_sq_2.cr_order_number +06)----------Projection: cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit +07)------------LeftSemi Join: cs1.cs_order_number = __correlated_sq_1.cs_order_number Filter: cs1.cs_warehouse_sk != __correlated_sq_1.cs_warehouse_sk +08)--------------Projection: cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit +09)----------------Inner Join: cs1.cs_call_center_sk = call_center.cc_call_center_sk +10)------------------Projection: cs1.cs_call_center_sk, cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit +11)--------------------Inner Join: cs1.cs_ship_addr_sk = customer_address.ca_address_sk +12)----------------------Projection: cs1.cs_ship_addr_sk, cs1.cs_call_center_sk, cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit +13)------------------------Inner Join: cs1.cs_ship_date_sk = date_dim.d_date_sk +14)--------------------------SubqueryAlias: cs1 +15)----------------------------TableScan: catalog_sales projection=[cs_ship_date_sk, cs_ship_addr_sk, cs_call_center_sk, cs_warehouse_sk, cs_order_number, cs_ext_ship_cost, cs_net_profit] +16)--------------------------Projection: date_dim.d_date_sk +17)----------------------------Filter: date_dim.d_date >= Date32("2002-02-01") AND date_dim.d_date <= Date32("2002-04-02") +18)------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2002-02-01"), date_dim.d_date <= Date32("2002-04-02")] +19)----------------------Projection: customer_address.ca_address_sk +20)------------------------Filter: customer_address.ca_state = Utf8View("GA") +21)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_state], partial_filters=[customer_address.ca_state = Utf8View("GA")] +22)------------------Projection: call_center.cc_call_center_sk +23)--------------------Filter: call_center.cc_county = Utf8View("Williamson County") +24)----------------------TableScan: call_center projection=[cc_call_center_sk, cc_county], partial_filters=[call_center.cc_county = Utf8View("Williamson County")] +25)--------------SubqueryAlias: __correlated_sq_1 +26)----------------SubqueryAlias: cs2 +27)------------------TableScan: catalog_sales projection=[cs_warehouse_sk, cs_order_number] +28)----------SubqueryAlias: __correlated_sq_2 +29)------------SubqueryAlias: cr1 +30)--------------TableScan: catalog_returns projection=[cr_order_number] +physical_plan +01)ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +06)----------AggregateExec: mode=FinalPartitioned, gby=[alias1@0 as alias1], aggr=[sum(cs1.cs_ext_ship_cost) as alias2, sum(cs1.cs_net_profit) as alias3] +07)------------RepartitionExec: partitioning=Hash([alias1@0], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[cs_order_number@0 as alias1], aggr=[sum(cs1.cs_ext_ship_cost) as alias2, sum(cs1.cs_net_profit) as alias3] +09)----------------HashJoinExec: mode=CollectLeft, join_type=LeftAnti, on=[(cs_order_number@0, cr_order_number@0)] +10)------------------CoalescePartitionsExec +11)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(cs_order_number@1, cs_order_number@1)], filter=cs_warehouse_sk@0 != cs_warehouse_sk@1, projection=[cs_order_number@1, cs_ext_ship_cost@2, cs_net_profit@3] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cs_call_center_sk@0)], projection=[cs_warehouse_sk@2, cs_order_number@3, cs_ext_ship_cost@4, cs_net_profit@5] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk], file_type=vortex, predicate: cc_county@25 = Williamson County +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, cs_ship_addr_sk@0)], projection=[cs_call_center_sk@2, cs_warehouse_sk@3, cs_order_number@4, cs_ext_ship_cost@5, cs_net_profit@6] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_state@8 = GA +17)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_ship_date_sk@0)], projection=[cs_ship_addr_sk@2, cs_call_center_sk@3, cs_warehouse_sk@4, cs_order_number@5, cs_ext_ship_cost@6, cs_net_profit@7] +18)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2002-02-01 AND d_date@2 <= 2002-04-02 +19)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_ship_date_sk, cs_ship_addr_sk, cs_call_center_sk, cs_warehouse_sk, cs_order_number, cs_ext_ship_cost, cs_net_profit], file_type=vortex +20)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_warehouse_sk, cs_order_number], file_type=vortex +21)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_order_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no new file mode 100644 index 00000000000..e377fd10cf3 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + i_item_desc, + s_state, + count(ss_quantity) AS store_sales_quantitycount, + avg(ss_quantity) AS store_sales_quantityave, + stddev_samp(ss_quantity) AS store_sales_quantitystdev, + stddev_samp(ss_quantity)/avg(ss_quantity) AS store_sales_quantitycov, + count(sr_return_quantity) AS store_returns_quantitycount, + avg(sr_return_quantity) AS store_returns_quantityave, + stddev_samp(sr_return_quantity) AS store_returns_quantitystdev, + stddev_samp(sr_return_quantity)/avg(sr_return_quantity) AS store_returns_quantitycov, + count(cs_quantity) AS catalog_sales_quantitycount, + avg(cs_quantity) AS catalog_sales_quantityave, + stddev_samp(cs_quantity) AS catalog_sales_quantitystdev, + stddev_samp(cs_quantity)/avg(cs_quantity) AS catalog_sales_quantitycov +FROM store_sales, + store_returns, + catalog_sales, + date_dim d1, + date_dim d2, + date_dim d3, + store, + item +WHERE d1.d_quarter_name = '2001Q1' + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_quarter_name IN ('2001Q1', + '2001Q2', + '2001Q3') + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_quarter_name IN ('2001Q1', + '2001Q2', + '2001Q3') +GROUP BY i_item_id, + i_item_desc, + s_state +ORDER BY i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + s_state NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS FIRST, item.i_item_desc ASC NULLS FIRST, store.s_state ASC NULLS FIRST, fetch=100 +02)--Projection: item.i_item_id, item.i_item_desc, store.s_state, count(store_sales.ss_quantity) AS store_sales_quantitycount, avg(store_sales.ss_quantity) AS store_sales_quantityave, stddev(store_sales.ss_quantity) AS stddev_samp(store_sales.ss_quantity) AS store_sales_quantitystdev, stddev(store_sales.ss_quantity) AS stddev_samp(store_sales.ss_quantity) / avg(store_sales.ss_quantity) AS store_sales_quantitycov, count(store_returns.sr_return_quantity) AS store_returns_quantitycount, avg(store_returns.sr_return_quantity) AS store_returns_quantityave, stddev(store_returns.sr_return_quantity) AS stddev_samp(store_returns.sr_return_quantity) AS store_returns_quantitystdev, stddev(store_returns.sr_return_quantity) AS stddev_samp(store_returns.sr_return_quantity) / avg(store_returns.sr_return_quantity) AS store_returns_quantitycov, count(catalog_sales.cs_quantity) AS catalog_sales_quantitycount, avg(catalog_sales.cs_quantity) AS catalog_sales_quantityave, stddev(catalog_sales.cs_quantity) AS stddev_samp(catalog_sales.cs_quantity) AS catalog_sales_quantitystdev, stddev(catalog_sales.cs_quantity) AS stddev_samp(catalog_sales.cs_quantity) / avg(catalog_sales.cs_quantity) AS catalog_sales_quantitycov +03)----Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_state]], aggr=[[count(store_sales.ss_quantity), avg(__common_expr_1 AS store_sales.ss_quantity), stddev(__common_expr_1 AS store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(__common_expr_2 AS store_returns.sr_return_quantity), stddev(__common_expr_2 AS store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(__common_expr_3 AS catalog_sales.cs_quantity), stddev(__common_expr_3 AS catalog_sales.cs_quantity)]] +04)------Projection: CAST(store_sales.ss_quantity AS Float64) AS __common_expr_1, CAST(store_returns.sr_return_quantity AS Float64) AS __common_expr_2, CAST(catalog_sales.cs_quantity AS Float64) AS __common_expr_3, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_state, item.i_item_id, item.i_item_desc +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_state +07)------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +08)--------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity +09)----------------Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk +10)------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +11)--------------------Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +13)------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +14)--------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +15)----------------------------Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk +16)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_return_quantity +17)--------------------------------Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +18)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] +19)----------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] +20)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] +21)--------------------------SubqueryAlias: d1 +22)----------------------------Projection: date_dim.d_date_sk +23)------------------------------Filter: date_dim.d_quarter_name = Utf8View("2001Q1") +24)--------------------------------TableScan: date_dim projection=[d_date_sk, d_quarter_name], partial_filters=[date_dim.d_quarter_name = Utf8View("2001Q1")] +25)----------------------SubqueryAlias: d2 +26)------------------------Projection: date_dim.d_date_sk +27)--------------------------Filter: date_dim.d_quarter_name = Utf8View("2001Q1") OR date_dim.d_quarter_name = Utf8View("2001Q2") OR date_dim.d_quarter_name = Utf8View("2001Q3") +28)----------------------------TableScan: date_dim projection=[d_date_sk, d_quarter_name], partial_filters=[date_dim.d_quarter_name = Utf8View("2001Q1") OR date_dim.d_quarter_name = Utf8View("2001Q2") OR date_dim.d_quarter_name = Utf8View("2001Q3")] +29)------------------SubqueryAlias: d3 +30)--------------------Projection: date_dim.d_date_sk +31)----------------------Filter: date_dim.d_quarter_name = Utf8View("2001Q1") OR date_dim.d_quarter_name = Utf8View("2001Q2") OR date_dim.d_quarter_name = Utf8View("2001Q3") +32)------------------------TableScan: date_dim projection=[d_date_sk, d_quarter_name], partial_filters=[date_dim.d_quarter_name = Utf8View("2001Q1") OR date_dim.d_quarter_name = Utf8View("2001Q2") OR date_dim.d_quarter_name = Utf8View("2001Q3")] +33)--------------TableScan: store projection=[s_store_sk, s_state] +34)----------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC, i_item_desc@1 ASC, s_state@2 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC, i_item_desc@1 ASC, s_state@2 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_state@2 as s_state, count(store_sales.ss_quantity)@3 as store_sales_quantitycount, avg(store_sales.ss_quantity)@4 as store_sales_quantityave, stddev(store_sales.ss_quantity)@5 as store_sales_quantitystdev, stddev(store_sales.ss_quantity)@5 / avg(store_sales.ss_quantity)@4 as store_sales_quantitycov, count(store_returns.sr_return_quantity)@6 as store_returns_quantitycount, avg(store_returns.sr_return_quantity)@7 as store_returns_quantityave, stddev(store_returns.sr_return_quantity)@8 as store_returns_quantitystdev, stddev(store_returns.sr_return_quantity)@8 / avg(store_returns.sr_return_quantity)@7 as store_returns_quantitycov, count(catalog_sales.cs_quantity)@9 as catalog_sales_quantitycount, avg(catalog_sales.cs_quantity)@10 as catalog_sales_quantityave, stddev(catalog_sales.cs_quantity)@11 as catalog_sales_quantitystdev, stddev(catalog_sales.cs_quantity)@11 / avg(catalog_sales.cs_quantity)@10 as catalog_sales_quantitycov] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_state@2 as s_state], aggr=[count(store_sales.ss_quantity), avg(store_sales.ss_quantity), stddev(store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(store_returns.sr_return_quantity), stddev(store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(catalog_sales.cs_quantity), stddev(catalog_sales.cs_quantity)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_state@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_id@7 as i_item_id, i_item_desc@8 as i_item_desc, s_state@6 as s_state], aggr=[count(store_sales.ss_quantity), avg(store_sales.ss_quantity), stddev(store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(store_returns.sr_return_quantity), stddev(store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(catalog_sales.cs_quantity), stddev(catalog_sales.cs_quantity)] +07)------------ProjectionExec: expr=[CAST(ss_quantity@0 AS Float64) as __common_expr_1, CAST(sr_return_quantity@1 AS Float64) as __common_expr_2, CAST(cs_quantity@2 AS Float64) as __common_expr_3, ss_quantity@0 as ss_quantity, sr_return_quantity@1 as sr_return_quantity, cs_quantity@2 as cs_quantity, s_state@3 as s_state, i_item_id@4 as i_item_id, i_item_desc@5 as i_item_desc] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_quantity@4, sr_return_quantity@5, cs_quantity@6, s_state@7, i_item_id@1, i_item_desc@2] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc], file_type=vortex +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@2, ss_quantity@4, sr_return_quantity@5, cs_quantity@6, s_state@1] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_state], file_type=vortex +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@4)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_return_quantity@4, cs_quantity@6] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_quarter_name@15 = 2001Q1 OR d_quarter_name@15 = 2001Q2 OR d_quarter_name@15 = 2001Q3 +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@3)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_return_quantity@5, cs_sold_date_sk@6, cs_quantity@7] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_quarter_name@15 = 2001Q1 OR d_quarter_name@15 = 2001Q2 OR d_quarter_name@15 = 2001Q3 +16)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_quantity@4, sr_returned_date_sk@5, sr_return_quantity@6, cs_sold_date_sk@7, cs_quantity@8] +17)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_quarter_name@15 = 2001Q1 +18)------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@1, sr_customer_sk@6), (cs_item_sk@2, sr_item_sk@5)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_store_sk@6, ss_quantity@7, sr_returned_date_sk@8, sr_return_quantity@11, cs_sold_date_sk@0, cs_quantity@3] +19)--------------------------RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 4), input_partitions=4 +20)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity], file_type=vortex +21)--------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 4), input_partitions=4 +22)----------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@2, ss_customer_sk@2), (sr_item_sk@1, ss_item_sk@1), (sr_ticket_number@3, ss_ticket_number@4)], projection=[ss_sold_date_sk@5, ss_item_sk@6, ss_store_sk@8, ss_quantity@10, sr_returned_date_sk@0, sr_item_sk@1, sr_customer_sk@2, sr_return_quantity@4] +23)------------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 4), input_partitions=4 +24)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity], file_type=vortex +25)------------------------------RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 4), input_partitions=4 +26)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no new file mode 100644 index 00000000000..256b2027ee5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no @@ -0,0 +1,111 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + ca_country, + ca_state, + ca_county, + avg(cast(cs_quantity AS decimal(12, 2))) agg1, + avg(cast(cs_list_price AS decimal(12, 2))) agg2, + avg(cast(cs_coupon_amt AS decimal(12, 2))) agg3, + avg(cast(cs_sales_price AS decimal(12, 2))) agg4, + avg(cast(cs_net_profit AS decimal(12, 2))) agg5, + avg(cast(c_birth_year AS decimal(12, 2))) agg6, + avg(cast(cd1.cd_dep_count AS decimal(12, 2))) agg7 +FROM catalog_sales, + customer_demographics cd1, + customer_demographics cd2, + customer, + customer_address, + date_dim, + item +WHERE cs_sold_date_sk = d_date_sk + AND cs_item_sk = i_item_sk + AND cs_bill_cdemo_sk = cd1.cd_demo_sk + AND cs_bill_customer_sk = c_customer_sk + AND cd1.cd_gender = 'F' + AND cd1.cd_education_status = 'Unknown' + AND c_current_cdemo_sk = cd2.cd_demo_sk + AND c_current_addr_sk = ca_address_sk + AND c_birth_month IN (1, + 6, + 8, + 9, + 12, + 2) + AND d_year = 1998 + AND ca_state IN ('MS', + 'IN', + 'ND', + 'OK', + 'NM', + 'VA', + 'MS') +GROUP BY ROLLUP (i_item_id, + ca_country, + ca_state, + ca_county) +ORDER BY ca_country NULLS FIRST, + ca_state NULLS FIRST, + ca_county NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer_address.ca_country ASC NULLS FIRST, customer_address.ca_state ASC NULLS FIRST, customer_address.ca_county ASC NULLS FIRST, item.i_item_id ASC NULLS FIRST, fetch=100 +02)--Projection: item.i_item_id, customer_address.ca_country, customer_address.ca_state, customer_address.ca_county, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4, avg(catalog_sales.cs_net_profit) AS agg5, avg(customer.c_birth_year) AS agg6, avg(cd1.cd_dep_count) AS agg7 +03)----Aggregate: groupBy=[[ROLLUP (item.i_item_id, customer_address.ca_country, customer_address.ca_state, customer_address.ca_county)]], aggr=[[avg(CAST(catalog_sales.cs_quantity AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_list_price AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_coupon_amt AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_sales_price AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_net_profit AS Decimal128(12, 2))), avg(CAST(customer.c_birth_year AS Decimal128(12, 2))), avg(CAST(cd1.cd_dep_count AS Decimal128(12, 2)))]] +04)------Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country, item.i_item_id +05)--------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +06)----------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country +07)------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +08)--------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country +09)----------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +10)------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_current_addr_sk, customer.c_birth_year +11)--------------------Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk +12)----------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_current_cdemo_sk, customer.c_current_addr_sk, customer.c_birth_year +13)------------------------Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk +14)--------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count +15)----------------------------Inner Join: catalog_sales.cs_bill_cdemo_sk = cd1.cd_demo_sk +16)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_item_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt, cs_net_profit] +17)------------------------------SubqueryAlias: cd1 +18)--------------------------------Projection: customer_demographics.cd_demo_sk, customer_demographics.cd_dep_count +19)----------------------------------Filter: customer_demographics.cd_gender = Utf8View("F") AND customer_demographics.cd_education_status = Utf8View("Unknown") +20)------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_education_status, cd_dep_count], partial_filters=[customer_demographics.cd_gender = Utf8View("F"), customer_demographics.cd_education_status = Utf8View("Unknown")] +21)--------------------------Projection: customer.c_customer_sk, customer.c_current_cdemo_sk, customer.c_current_addr_sk, customer.c_birth_year +22)----------------------------Filter: customer.c_birth_month IN ([Int64(1), Int64(6), Int64(8), Int64(9), Int64(12), Int64(2)]) +23)------------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk, c_birth_month, c_birth_year], partial_filters=[customer.c_birth_month IN ([Int64(1), Int64(6), Int64(8), Int64(9), Int64(12), Int64(2)])] +24)----------------------SubqueryAlias: cd2 +25)------------------------TableScan: customer_demographics projection=[cd_demo_sk] +26)------------------Filter: customer_address.ca_state IN ([Utf8View("MS"), Utf8View("IN"), Utf8View("ND"), Utf8View("OK"), Utf8View("NM"), Utf8View("VA"), Utf8View("MS")]) +27)--------------------TableScan: customer_address projection=[ca_address_sk, ca_county, ca_state, ca_country], partial_filters=[customer_address.ca_state IN ([Utf8View("MS"), Utf8View("IN"), Utf8View("ND"), Utf8View("OK"), Utf8View("NM"), Utf8View("VA"), Utf8View("MS")])] +28)--------------Projection: date_dim.d_date_sk +29)----------------Filter: date_dim.d_year = Int64(1998) +30)------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(1998)] +31)----------TableScan: item projection=[i_item_sk, i_item_id] +physical_plan +01)SortPreservingMergeExec: [ca_country@1 ASC, ca_state@2 ASC, ca_county@3 ASC, i_item_id@0 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[ca_country@1 ASC, ca_state@2 ASC, ca_county@3 ASC, i_item_id@0 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_item_id@0 as i_item_id, ca_country@1 as ca_country, ca_state@2 as ca_state, ca_county@3 as ca_county, avg(catalog_sales.cs_quantity)@5 as agg1, avg(catalog_sales.cs_list_price)@6 as agg2, avg(catalog_sales.cs_coupon_amt)@7 as agg3, avg(catalog_sales.cs_sales_price)@8 as agg4, avg(catalog_sales.cs_net_profit)@9 as agg5, avg(customer.c_birth_year)@10 as agg6, avg(cd1.cd_dep_count)@11 as agg7] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, ca_country@1 as ca_country, ca_state@2 as ca_state, ca_county@3 as ca_county, __grouping_id@4 as __grouping_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price), avg(catalog_sales.cs_net_profit), avg(customer.c_birth_year), avg(cd1.cd_dep_count)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0, ca_country@1, ca_state@2, ca_county@3, __grouping_id@4], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[(NULL as i_item_id, NULL as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, NULL as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, ca_state@8 as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, ca_state@8 as ca_state, ca_county@7 as ca_county)], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price), avg(catalog_sales.cs_net_profit), avg(customer.c_birth_year), avg(cd1.cd_dep_count)] +07)------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_quantity@1, cs_list_price@2, cs_sales_price@3, cs_coupon_amt@4, cs_net_profit@5, cd_dep_count@6, c_birth_year@7, ca_county@8, ca_state@9, ca_country@10, i_item_id@12] +09)----------------CoalescePartitionsExec +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@2, cs_quantity@3, cs_list_price@4, cs_sales_price@5, cs_coupon_amt@6, cs_net_profit@7, cd_dep_count@8, c_birth_year@9, ca_county@10, ca_state@11, ca_country@12] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@8)], projection=[cs_sold_date_sk@4, cs_item_sk@5, cs_quantity@6, cs_list_price@7, cs_sales_price@8, cs_coupon_amt@9, cs_net_profit@10, cd_dep_count@11, c_birth_year@13, ca_county@1, ca_state@2, ca_country@3] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county, ca_state, ca_country], file_type=vortex, predicate: ca_state@8 IN (SET) ([MS, IN, ND, OK, NM, VA, MS]) +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@8, cd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, cs_net_profit@6, cd_dep_count@7, c_current_addr_sk@9, c_birth_year@10] +15)------------------------CoalescePartitionsExec +16)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[cs_sold_date_sk@4, cs_item_sk@6, cs_quantity@7, cs_list_price@8, cs_sales_price@9, cs_coupon_amt@10, cs_net_profit@11, cd_dep_count@12, c_current_cdemo_sk@1, c_current_addr_sk@2, c_birth_year@3] +17)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk, c_birth_year], file_type=vortex, predicate: c_birth_month@12 IN (SET) ([1, 6, 8, 9, 12, 2]) +18)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, cs_bill_cdemo_sk@2)], projection=[cs_sold_date_sk@2, cs_bill_customer_sk@3, cs_item_sk@5, cs_quantity@6, cs_list_price@7, cs_sales_price@8, cs_coupon_amt@9, cs_net_profit@10, cd_dep_count@1] +19)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_dep_count], file_type=vortex, predicate: cd_gender@1 = F AND cd_education_status@3 = Unknown +20)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_item_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt, cs_net_profit], file_type=vortex +21)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex +23)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no new file mode 100644 index 00000000000..e580bb2f0e3 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_brand_id brand_id, + i_brand brand, + i_manufact_id, + i_manufact, + sum(ss_ext_sales_price) ext_price +FROM date_dim, + store_sales, + item, + customer, + customer_address, + store +WHERE d_date_sk = ss_sold_date_sk + AND ss_item_sk = i_item_sk + AND i_manager_id=8 + AND d_moy=11 + AND d_year=1998 + AND ss_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND SUBSTRING(ca_zip, 1, 5) <> SUBSTRING(s_zip, 1, 5) + AND ss_store_sk = s_store_sk +GROUP BY i_brand, + i_brand_id, + i_manufact_id, + i_manufact +ORDER BY ext_price DESC, + i_brand, + i_brand_id, + i_manufact_id, + i_manufact +LIMIT 100 ; +---- +logical_plan +01)Sort: ext_price DESC NULLS FIRST, brand ASC NULLS LAST, brand_id ASC NULLS LAST, item.i_manufact_id ASC NULLS LAST, item.i_manufact ASC NULLS LAST, fetch=100 +02)--Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, item.i_manufact_id, item.i_manufact, sum(store_sales.ss_ext_sales_price) AS ext_price +03)----Aggregate: groupBy=[[item.i_brand, item.i_brand_id, item.i_manufact_id, item.i_manufact]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +04)------Projection: store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact +05)--------Inner Join: store_sales.ss_store_sk = store.s_store_sk Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) != substr(store.s_zip, Int64(1), Int64(5)) +06)----------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact, customer_address.ca_zip +07)------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +08)--------------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact, customer.c_current_addr_sk +09)----------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +10)------------------Projection: store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact +11)--------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price +13)------------------------Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk +14)--------------------------Projection: date_dim.d_date_sk +15)----------------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1998) +16)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1998)] +17)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] +18)----------------------Projection: item.i_item_sk, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact +19)------------------------Filter: item.i_manager_id = Int64(8) +20)--------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id, i_manufact, i_manager_id], partial_filters=[item.i_manager_id = Int64(8)] +21)------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +22)--------------TableScan: customer_address projection=[ca_address_sk, ca_zip] +23)----------TableScan: store projection=[s_store_sk, s_zip] +physical_plan +01)SortPreservingMergeExec: [ext_price@4 DESC, brand@1 ASC NULLS LAST, brand_id@0 ASC NULLS LAST, i_manufact_id@2 ASC NULLS LAST, i_manufact@3 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, i_manufact_id@2 as i_manufact_id, i_manufact@3 as i_manufact, sum(store_sales.ss_ext_sales_price)@4 as ext_price] +03)----SortExec: TopK(fetch=100), expr=[sum(store_sales.ss_ext_sales_price)@4 DESC, i_brand@0 ASC NULLS LAST, i_brand_id@1 ASC NULLS LAST, i_manufact_id@2 ASC NULLS LAST, i_manufact@3 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id, i_manufact_id@2 as i_manufact_id, i_manufact@3 as i_manufact], aggr=[sum(store_sales.ss_ext_sales_price)] +05)--------RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1, i_manufact_id@2, i_manufact@3], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_brand@2 as i_brand, i_brand_id@1 as i_brand_id, i_manufact_id@3 as i_manufact_id, i_manufact@4 as i_manufact], aggr=[sum(store_sales.ss_ext_sales_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], filter=substr(ca_zip@0, 1, 5) != substr(s_zip@1, 1, 5), projection=[ss_ext_sales_price@3, i_brand_id@4, i_brand@5, i_manufact_id@6, i_manufact@7] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_zip], file_type=vortex +09)--------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_addr_sk@6, ca_address_sk@0)], projection=[ss_store_sk@0, ss_ext_sales_price@1, i_brand_id@2, i_brand@3, i_manufact_id@4, i_manufact@5, ca_zip@8] +11)------------------CoalescePartitionsExec +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[ss_store_sk@1, ss_ext_sales_price@2, i_brand_id@3, i_brand@4, i_manufact_id@5, i_manufact@6, c_current_addr_sk@8] +13)----------------------CoalescePartitionsExec +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_customer_sk@6, ss_store_sk@7, ss_ext_sales_price@8, i_brand_id@1, i_brand@2, i_manufact_id@3, i_manufact@4] +15)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id, i_manufact], file_type=vortex, predicate: i_manager_id@20 = 8 +16)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_store_sk@4, ss_ext_sales_price@5] +17)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1998 +18)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price], file_type=vortex +19)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +20)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +21)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_zip], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no new file mode 100644 index 00000000000..39919c75690 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no @@ -0,0 +1,157 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH wscs AS + (SELECT sold_date_sk, + sales_price + FROM + (SELECT ws_sold_date_sk sold_date_sk, + ws_ext_sales_price sales_price + FROM web_sales + UNION ALL SELECT cs_sold_date_sk sold_date_sk, + cs_ext_sales_price sales_price + FROM catalog_sales) sq1), + wswscs AS + (SELECT d_week_seq, + sum(CASE + WHEN (d_day_name='Sunday') THEN sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN sales_price + ELSE NULL + END) sat_sales + FROM wscs, + date_dim + WHERE d_date_sk = sold_date_sk + GROUP BY d_week_seq) +SELECT d_week_seq1, + round(sun_sales1/sun_sales2, 2) r1, + round(mon_sales1/mon_sales2, 2) r2, + round(tue_sales1/tue_sales2, 2) r3, + round(wed_sales1/wed_sales2, 2) r4, + round(thu_sales1/thu_sales2, 2) r5, + round(fri_sales1/fri_sales2, 2) r6, + round(sat_sales1/sat_sales2, 2) +FROM + (SELECT wswscs.d_week_seq d_week_seq1, + sun_sales sun_sales1, + mon_sales mon_sales1, + tue_sales tue_sales1, + wed_sales wed_sales1, + thu_sales thu_sales1, + fri_sales fri_sales1, + sat_sales sat_sales1 + FROM wswscs, + date_dim + WHERE date_dim.d_week_seq = wswscs.d_week_seq + AND d_year = 2001) y, + (SELECT wswscs.d_week_seq d_week_seq2, + sun_sales sun_sales2, + mon_sales mon_sales2, + tue_sales tue_sales2, + wed_sales wed_sales2, + thu_sales thu_sales2, + fri_sales fri_sales2, + sat_sales sat_sales2 + FROM wswscs, + date_dim + WHERE date_dim.d_week_seq = wswscs.d_week_seq + AND d_year = 2001+1) z +WHERE d_week_seq1 = d_week_seq2-53 +ORDER BY d_week_seq1 NULLS FIRST; +---- +logical_plan +01)Sort: y.d_week_seq1 ASC NULLS FIRST +02)--Projection: y.d_week_seq1, round(y.sun_sales1 / z.sun_sales2, Int32(2)) AS r1, round(y.mon_sales1 / z.mon_sales2, Int32(2)) AS r2, round(y.tue_sales1 / z.tue_sales2, Int32(2)) AS r3, round(y.wed_sales1 / z.wed_sales2, Int32(2)) AS r4, round(y.thu_sales1 / z.thu_sales2, Int32(2)) AS r5, round(y.fri_sales1 / z.fri_sales2, Int32(2)) AS r6, round(y.sat_sales1 / z.sat_sales2, Int32(2)) AS round(y.sat_sales1 / z.sat_sales2,Int64(2)) +03)----Inner Join: y.d_week_seq1 = z.d_week_seq2 - Int64(53) +04)------SubqueryAlias: y +05)--------Projection: wswscs.d_week_seq AS d_week_seq1, wswscs.sun_sales AS sun_sales1, wswscs.mon_sales AS mon_sales1, wswscs.tue_sales AS tue_sales1, wswscs.wed_sales AS wed_sales1, wswscs.thu_sales AS thu_sales1, wswscs.fri_sales AS fri_sales1, wswscs.sat_sales AS sat_sales1 +06)----------Inner Join: wswscs.d_week_seq = date_dim.d_week_seq +07)------------SubqueryAlias: wswscs +08)--------------Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales +09)----------------Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8View("Sunday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Monday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Tuesday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Wednesday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Thursday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Friday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Saturday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] +10)------------------Projection: wscs.sales_price, date_dim.d_week_seq, date_dim.d_day_name +11)--------------------Inner Join: wscs.sold_date_sk = date_dim.d_date_sk +12)----------------------SubqueryAlias: wscs +13)------------------------SubqueryAlias: sq1 +14)--------------------------Union +15)----------------------------Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price +16)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] +17)----------------------------Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price +18)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] +19)----------------------TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] +20)------------Projection: date_dim.d_week_seq +21)--------------Filter: date_dim.d_year = Int64(2001) +22)----------------TableScan: date_dim projection=[d_week_seq, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +23)------SubqueryAlias: z +24)--------Projection: wswscs.d_week_seq AS d_week_seq2, wswscs.sun_sales AS sun_sales2, wswscs.mon_sales AS mon_sales2, wswscs.tue_sales AS tue_sales2, wswscs.wed_sales AS wed_sales2, wswscs.thu_sales AS thu_sales2, wswscs.fri_sales AS fri_sales2, wswscs.sat_sales AS sat_sales2 +25)----------Inner Join: wswscs.d_week_seq = date_dim.d_week_seq +26)------------SubqueryAlias: wswscs +27)--------------Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales +28)----------------Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8View("Sunday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Monday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Tuesday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Wednesday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Thursday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Friday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Saturday") THEN wscs.sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] +29)------------------Projection: wscs.sales_price, date_dim.d_week_seq, date_dim.d_day_name +30)--------------------Inner Join: wscs.sold_date_sk = date_dim.d_date_sk +31)----------------------SubqueryAlias: wscs +32)------------------------SubqueryAlias: sq1 +33)--------------------------Union +34)----------------------------Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price +35)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] +36)----------------------------Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price +37)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] +38)----------------------TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] +39)------------Projection: date_dim.d_week_seq +40)--------------Filter: date_dim.d_year = Int64(2002) +41)----------------TableScan: date_dim projection=[d_week_seq, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +physical_plan +01)SortPreservingMergeExec: [d_week_seq1@0 ASC] +02)--SortExec: expr=[d_week_seq1@0 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[d_week_seq1@0 as d_week_seq1, round(sun_sales1@1 / sun_sales2@2, 2) as r1, round(mon_sales1@3 / mon_sales2@4, 2) as r2, round(tue_sales1@5 / tue_sales2@6, 2) as r3, round(wed_sales1@7 / wed_sales2@8, 2) as r4, round(thu_sales1@9 / thu_sales2@10, 2) as r5, round(fri_sales1@11 / fri_sales2@12, 2) as r6, round(sat_sales1@13 / sat_sales2@14, 2) as round(y.sat_sales1 / z.sat_sales2,Int64(2))] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_week_seq1@0, z.d_week_seq2 - Int64(53)@8)], projection=[d_week_seq1@0, sun_sales1@1, sun_sales2@9, mon_sales1@2, mon_sales2@10, tue_sales1@3, tue_sales2@11, wed_sales1@4, wed_sales2@12, thu_sales1@5, thu_sales2@13, fri_sales1@6, fri_sales2@14, sat_sales1@7, sat_sales2@15] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[d_week_seq@0 as d_week_seq1, sun_sales@1 as sun_sales1, mon_sales@2 as mon_sales1, tue_sales@3 as tue_sales1, wed_sales@4 as wed_sales1, thu_sales@5 as thu_sales1, fri_sales@6 as fri_sales1, sat_sales@7 as sat_sales1] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@1, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_year@6 = 2001 +09)--------------ProjectionExec: expr=[d_week_seq@0 as d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END)@1 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END)@2 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END)@3 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END)@4 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END)@5 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END)@6 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)@7 as sat_sales] +10)----------------AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] +11)------------------RepartitionExec: partitioning=Hash([d_week_seq@0], 4), input_partitions=8 +12)--------------------AggregateExec: mode=Partial, gby=[d_week_seq@1 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sold_date_sk@0)], projection=[sales_price@4, d_week_seq@1, d_day_name@2] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex +15)------------------------UnionExec +16)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk@0 as sold_date_sk, ws_ext_sales_price@23 as sales_price], file_type=vortex +17)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk@0 as sold_date_sk, cs_ext_sales_price@23 as sales_price], file_type=vortex +18)--------ProjectionExec: expr=[d_week_seq@0 as d_week_seq2, sun_sales@1 as sun_sales2, mon_sales@2 as mon_sales2, tue_sales@3 as tue_sales2, wed_sales@4 as wed_sales2, thu_sales@5 as thu_sales2, fri_sales@6 as fri_sales2, sat_sales@7 as sat_sales2, d_week_seq@0 - 53 as z.d_week_seq2 - Int64(53)] +19)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@1, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8] +20)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_year@6 = 2002 +21)------------ProjectionExec: expr=[d_week_seq@0 as d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END)@1 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END)@2 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END)@3 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END)@4 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END)@5 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END)@6 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)@7 as sat_sales] +22)--------------AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] +23)----------------RepartitionExec: partitioning=Hash([d_week_seq@0], 4), input_partitions=8 +24)------------------AggregateExec: mode=Partial, gby=[d_week_seq@1 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN wscs.sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] +25)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sold_date_sk@0)], projection=[sales_price@4, d_week_seq@1, d_day_name@2] +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex +27)----------------------UnionExec +28)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk@0 as sold_date_sk, ws_ext_sales_price@23 as sales_price], file_type=vortex +29)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk@0 as sold_date_sk, cs_ext_sales_price@23 as sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q20.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q20.slt.no new file mode 100644 index 00000000000..92150ec667c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q20.slt.no @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id , + i_item_desc, + i_category, + i_class, + i_current_price , + sum(cs_ext_sales_price) AS itemrevenue, + sum(cs_ext_sales_price)*100.0000/sum(sum(cs_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM catalog_sales , + item, + date_dim +WHERE cs_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id , + i_item_desc, + i_category , + i_class , + i_current_price +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + revenueratio NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: item.i_category ASC NULLS FIRST, item.i_class ASC NULLS FIRST, item.i_item_id ASC NULLS FIRST, item.i_item_desc ASC NULLS FIRST, revenueratio ASC NULLS FIRST, fetch=100 +02)--Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(catalog_sales.cs_ext_sales_price) AS itemrevenue, CAST(sum(catalog_sales.cs_ext_sales_price) AS Float64) * Float64(100) / CAST(sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS Float64) AS revenueratio +03)----WindowAggr: windowExpr=[[sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +04)------Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] +05)--------Projection: catalog_sales.cs_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +06)----------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +07)------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +08)--------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +09)----------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] +10)----------------Filter: item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home") +11)------------------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], partial_filters=[item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home")] +12)------------Projection: date_dim.d_date_sk +13)--------------Filter: date_dim.d_date >= Date32("1999-02-22") AND date_dim.d_date <= Date32("1999-03-24") +14)----------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("1999-02-22"), date_dim.d_date <= Date32("1999-03-24")] +physical_plan +01)SortPreservingMergeExec: [i_category@2 ASC, i_class@3 ASC, i_item_id@0 ASC, i_item_desc@1 ASC, revenueratio@6 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_category@2 ASC, i_class@3 ASC, i_item_id@0 ASC, i_item_desc@1 ASC, revenueratio@6 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(catalog_sales.cs_ext_sales_price)@5 as itemrevenue, CAST(sum(catalog_sales.cs_ext_sales_price)@5 AS Float64) * 100 / CAST(sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 AS Float64) as revenueratio] +04)------WindowAggExec: wdw=[sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +05)--------SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([i_class@3], 4), input_partitions=4 +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(catalog_sales.cs_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(catalog_sales.cs_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ext_sales_price@2, i_item_id@3, i_item_desc@4, i_current_price@5, i_class@6, i_category@7] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 1999-02-22 AND d_date@2 <= 1999-03-24 +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@6, cs_ext_sales_price@8, i_item_id@1, i_item_desc@2, i_current_price@3, i_class@4, i_category@5] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], file_type=vortex, predicate: i_category@12 = Sports OR i_category@12 = Books OR i_category@12 = Home +14)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no new file mode 100644 index 00000000000..988e1ba5dd5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no @@ -0,0 +1,73 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT w_warehouse_name, + i_item_id, + sum(CASE + WHEN (cast(d_date AS date) < CAST ('2000-03-11' AS date)) THEN inv_quantity_on_hand + ELSE 0 + END) AS inv_before, + sum(CASE + WHEN (cast(d_date AS date) >= CAST ('2000-03-11' AS date)) THEN inv_quantity_on_hand + ELSE 0 + END) AS inv_after + FROM inventory, + warehouse, + item, + date_dim + WHERE i_current_price BETWEEN 0.99 AND 1.49 + AND i_item_sk = inv_item_sk + AND inv_warehouse_sk = w_warehouse_sk + AND inv_date_sk = d_date_sk + AND d_date BETWEEN CAST ('2000-02-10' AS date) AND CAST ('2000-04-10' AS date) + GROUP BY w_warehouse_name, + i_item_id) x +WHERE (CASE + WHEN inv_before > 0 THEN (inv_after*1.000) / inv_before + ELSE NULL + END) BETWEEN 2.000/3.000 AND 3.000/2.000 +ORDER BY w_warehouse_name NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: x.w_warehouse_name ASC NULLS FIRST, x.i_item_id ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: x +03)----Projection: warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_after +04)------Filter: __common_expr_3 >= Float64(0.6666666666666666) AND __common_expr_3 <= Float64(1.5) +05)--------Projection: CASE WHEN sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) > Int64(0) THEN CAST(sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS Float64) / CAST(sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS Float64) ELSE Float64(NULL) END AS __common_expr_3, warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) +06)----------Aggregate: groupBy=[[warehouse.w_warehouse_name, item.i_item_id]], aggr=[[sum(CASE WHEN date_dim.d_date < Date32("2000-03-11") THEN CAST(inventory.inv_quantity_on_hand AS Int64) ELSE Int64(0) END) AS sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Date32("2000-03-11") THEN CAST(inventory.inv_quantity_on_hand AS Int64) ELSE Int64(0) END) AS sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)]] +07)------------Projection: inventory.inv_quantity_on_hand, warehouse.w_warehouse_name, item.i_item_id, date_dim.d_date +08)--------------Inner Join: inventory.inv_date_sk = date_dim.d_date_sk +09)----------------Projection: inventory.inv_date_sk, inventory.inv_quantity_on_hand, warehouse.w_warehouse_name, item.i_item_id +10)------------------Inner Join: inventory.inv_item_sk = item.i_item_sk +11)--------------------Projection: inventory.inv_date_sk, inventory.inv_item_sk, inventory.inv_quantity_on_hand, warehouse.w_warehouse_name +12)----------------------Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk +13)------------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] +14)------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +15)--------------------Projection: item.i_item_sk, item.i_item_id +16)----------------------Filter: item.i_current_price >= Decimal128(0.99,7,2) AND item.i_current_price <= Decimal128(1.49,7,2) +17)------------------------TableScan: item projection=[i_item_sk, i_item_id, i_current_price], partial_filters=[item.i_current_price >= Decimal128(0.99,7,2), item.i_current_price <= Decimal128(1.49,7,2)] +18)----------------Filter: date_dim.d_date >= Date32("2000-02-10") AND date_dim.d_date <= Date32("2000-04-10") +19)------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-02-10"), date_dim.d_date <= Date32("2000-04-10")] +physical_plan +01)SortPreservingMergeExec: [w_warehouse_name@0 ASC, i_item_id@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[w_warehouse_name@0 ASC, i_item_id@1 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 as inv_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 as inv_after] +04)------FilterExec: __common_expr_3@0 >= 0.6666666666666666 AND __common_expr_3@0 <= 1.5, projection=[w_warehouse_name@1, i_item_id@2, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3, sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@4] +05)--------ProjectionExec: expr=[CASE WHEN sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 > 0 THEN CAST(sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 AS Float64) / CAST(sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 AS Float64) END as __common_expr_3, w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 as sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 as sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] +06)----------AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < 2000-03-11 THEN inventory.inv_quantity_on_hand ELSE 0 END) as sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= 2000-03-11 THEN inventory.inv_quantity_on_hand ELSE 0 END) as sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] +07)------------RepartitionExec: partitioning=Hash([w_warehouse_name@0, i_item_id@1], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[w_warehouse_name@1 as w_warehouse_name, i_item_id@2 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < 2000-03-11 THEN inventory.inv_quantity_on_hand ELSE 0 END) as sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= 2000-03-11 THEN inventory.inv_quantity_on_hand ELSE 0 END) as sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, inv_date_sk@0)], projection=[inv_quantity_on_hand@3, w_warehouse_name@4, i_item_id@5, d_date@1] +10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_date@2 >= 2000-02-10 AND d_date@2 <= 2000-04-10 +11)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[inv_date_sk@2, inv_quantity_on_hand@4, w_warehouse_name@5, i_item_id@1] +12)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, predicate: i_current_price@5 >= 0.99 AND i_current_price@5 <= 1.49 +13)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, inv_warehouse_sk@2)], projection=[inv_date_sk@2, inv_item_sk@3, inv_quantity_on_hand@5, w_warehouse_name@1] +14)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name], file_type=vortex +15)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +16)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no new file mode 100644 index 00000000000..1d4cf91c79c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no @@ -0,0 +1,50 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_product_name , + i_brand , + i_class , + i_category , + avg(inv_quantity_on_hand) qoh +FROM inventory , + date_dim , + item +WHERE inv_date_sk=d_date_sk + AND inv_item_sk=i_item_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 +GROUP BY rollup(i_product_name ,i_brand ,i_class ,i_category) +ORDER BY qoh NULLS FIRST, + i_product_name NULLS FIRST, + i_brand NULLS FIRST, + i_class NULLS FIRST, + i_category NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: qoh ASC NULLS FIRST, item.i_product_name ASC NULLS FIRST, item.i_brand ASC NULLS FIRST, item.i_class ASC NULLS FIRST, item.i_category ASC NULLS FIRST, fetch=100 +02)--Projection: item.i_product_name, item.i_brand, item.i_class, item.i_category, avg(inventory.inv_quantity_on_hand) AS qoh +03)----Aggregate: groupBy=[[ROLLUP (item.i_product_name, item.i_brand, item.i_class, item.i_category)]], aggr=[[avg(CAST(inventory.inv_quantity_on_hand AS Float64))]] +04)------Projection: inventory.inv_quantity_on_hand, item.i_brand, item.i_class, item.i_category, item.i_product_name +05)--------Inner Join: inventory.inv_item_sk = item.i_item_sk +06)----------Projection: inventory.inv_item_sk, inventory.inv_quantity_on_hand +07)------------Inner Join: inventory.inv_date_sk = date_dim.d_date_sk +08)--------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand] +09)--------------Projection: date_dim.d_date_sk +10)----------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +11)------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +12)----------TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] +physical_plan +01)SortPreservingMergeExec: [qoh@4 ASC, i_product_name@0 ASC, i_brand@1 ASC, i_class@2 ASC, i_category@3 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[qoh@4 ASC, i_product_name@0 ASC, i_brand@1 ASC, i_class@2 ASC, i_category@3 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_product_name@0 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category, avg(inventory.inv_quantity_on_hand)@5 as qoh] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category, __grouping_id@4 as __grouping_id], aggr=[avg(inventory.inv_quantity_on_hand)] +05)--------RepartitionExec: partitioning=Hash([i_product_name@0, i_brand@1, i_class@2, i_category@3, __grouping_id@4], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[(NULL as i_product_name, NULL as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, NULL as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category)], aggr=[avg(inventory.inv_quantity_on_hand)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@0)], projection=[inv_quantity_on_hand@6, i_brand@1, i_class@2, i_category@3, i_product_name@4] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_class, i_category, i_product_name], file_type=vortex +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, inv_date_sk@0)], projection=[inv_item_sk@2, inv_quantity_on_hand@3] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +11)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no new file mode 100644 index 00000000000..8cec1a94048 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no @@ -0,0 +1,300 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH frequent_ss_items AS + (SELECT itemdesc, + i_item_sk item_sk, + d_date solddate, + count(*) cnt + FROM store_sales, + date_dim, + (SELECT SUBSTRING(i_item_desc, 1, 30) itemdesc, + * + FROM item) sq1 + WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND d_year IN (2000, + 2000+1, + 2000+2, + 2000+3) + GROUP BY itemdesc, + i_item_sk, + d_date + HAVING count(*) >4), + max_store_sales AS + (SELECT max(csales) tpcds_cmax + FROM + (SELECT c_customer_sk, + sum(ss_quantity*ss_sales_price) csales + FROM store_sales, + customer, + date_dim + WHERE ss_customer_sk = c_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year IN (2000, + 2000+1, + 2000+2, + 2000+3) + GROUP BY c_customer_sk) sq2), + best_ss_customer AS + (SELECT c_customer_sk, + sum(ss_quantity*ss_sales_price) ssales + FROM store_sales, + customer, + max_store_sales + WHERE ss_customer_sk = c_customer_sk + GROUP BY c_customer_sk + HAVING sum(ss_quantity*ss_sales_price) > (50/100.0) * max(tpcds_cmax)) +SELECT c_last_name, + c_first_name, + sales +FROM + (SELECT c_last_name, + c_first_name, + sum(cs_quantity*cs_list_price) sales + FROM catalog_sales, + customer, + date_dim, + frequent_ss_items, + best_ss_customer + WHERE d_year = 2000 + AND d_moy = 2 + AND cs_sold_date_sk = d_date_sk + AND cs_item_sk = item_sk + AND cs_bill_customer_sk = best_ss_customer.c_customer_sk + AND cs_bill_customer_sk = customer.c_customer_sk + GROUP BY c_last_name, + c_first_name + UNION ALL SELECT c_last_name, + c_first_name, + sum(ws_quantity*ws_list_price) sales + FROM web_sales, + customer, + date_dim, + frequent_ss_items, + best_ss_customer + WHERE d_year = 2000 + AND d_moy = 2 + AND ws_sold_date_sk = d_date_sk + AND ws_item_sk = item_sk + AND ws_bill_customer_sk = best_ss_customer.c_customer_sk + AND ws_bill_customer_sk = customer.c_customer_sk + GROUP BY c_last_name, + c_first_name) sq3 +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + sales NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sq3.c_last_name ASC NULLS FIRST, sq3.c_first_name ASC NULLS FIRST, sq3.sales ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: sq3 +03)----Union +04)------Projection: customer.c_last_name, customer.c_first_name, sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price) AS sales +05)--------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name]], aggr=[[sum(CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) * catalog_sales.cs_list_price)]] +06)----------Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, customer.c_first_name, customer.c_last_name +07)------------LeftSemi Join: catalog_sales.cs_bill_customer_sk = best_ss_customer.c_customer_sk +08)--------------Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, customer.c_first_name, customer.c_last_name +09)----------------Inner Join: catalog_sales.cs_item_sk = frequent_ss_items.item_sk +10)------------------Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, customer.c_first_name, customer.c_last_name +11)--------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +12)----------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, customer.c_first_name, customer.c_last_name +13)------------------------Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk +14)--------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity, cs_list_price] +15)--------------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +16)----------------------Projection: date_dim.d_date_sk +17)------------------------Filter: date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(2) +18)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2000), date_dim.d_moy = Int64(2)] +19)------------------SubqueryAlias: frequent_ss_items +20)--------------------Projection: sq1.i_item_sk AS item_sk +21)----------------------Filter: count(Int64(1)) > Int64(4) +22)------------------------Projection: sq1.i_item_sk, count(Int64(1)) +23)--------------------------Aggregate: groupBy=[[sq1.itemdesc, sq1.i_item_sk, date_dim.d_date]], aggr=[[count(Int64(1))]] +24)----------------------------Projection: date_dim.d_date, sq1.itemdesc, sq1.i_item_sk +25)------------------------------Inner Join: store_sales.ss_item_sk = sq1.i_item_sk +26)--------------------------------Projection: store_sales.ss_item_sk, date_dim.d_date +27)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +28)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk] +29)------------------------------------Projection: date_dim.d_date_sk, date_dim.d_date +30)--------------------------------------Filter: date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)]) +31)----------------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_year], partial_filters=[date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)])] +32)--------------------------------SubqueryAlias: sq1 +33)----------------------------------Projection: substr(item.i_item_desc, Int64(1), Int64(30)) AS itemdesc, item.i_item_sk +34)------------------------------------TableScan: item projection=[i_item_sk, i_item_desc] +35)--------------SubqueryAlias: best_ss_customer +36)----------------Projection: customer.c_customer_sk +37)------------------Filter: CAST(sum(store_sales.ss_quantity * store_sales.ss_sales_price) AS Decimal128(38, 15)) > CAST(Float64(0.5) * CAST(max(max_store_sales.tpcds_cmax) AS Float64) AS Decimal128(38, 15)) +38)--------------------Aggregate: groupBy=[[customer.c_customer_sk]], aggr=[[sum(CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)]] +39)----------------------Cross Join: +40)------------------------Projection: store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +41)--------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +42)----------------------------TableScan: store_sales projection=[ss_customer_sk, ss_quantity, ss_sales_price] +43)----------------------------TableScan: customer projection=[c_customer_sk] +44)------------------------SubqueryAlias: max_store_sales +45)--------------------------Projection: max(sq2.csales) AS tpcds_cmax +46)----------------------------Aggregate: groupBy=[[]], aggr=[[max(sq2.csales)]] +47)------------------------------SubqueryAlias: sq2 +48)--------------------------------Projection: sum(store_sales.ss_quantity * store_sales.ss_sales_price) AS csales +49)----------------------------------Aggregate: groupBy=[[customer.c_customer_sk]], aggr=[[sum(CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price)]] +50)------------------------------------Projection: store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +51)--------------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +52)----------------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +53)------------------------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +54)--------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_quantity, ss_sales_price] +55)--------------------------------------------TableScan: customer projection=[c_customer_sk] +56)----------------------------------------Projection: date_dim.d_date_sk +57)------------------------------------------Filter: date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)]) +58)--------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)])] +59)------Projection: customer.c_last_name, customer.c_first_name, sum(web_sales.ws_quantity * web_sales.ws_list_price) AS sales +60)--------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name]], aggr=[[sum(CAST(web_sales.ws_quantity AS Decimal128(20, 0)) * web_sales.ws_list_price)]] +61)----------Projection: web_sales.ws_quantity, web_sales.ws_list_price, customer.c_first_name, customer.c_last_name +62)------------LeftSemi Join: web_sales.ws_bill_customer_sk = best_ss_customer.c_customer_sk +63)--------------Projection: web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_list_price, customer.c_first_name, customer.c_last_name +64)----------------Inner Join: web_sales.ws_item_sk = frequent_ss_items.item_sk +65)------------------Projection: web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_list_price, customer.c_first_name, customer.c_last_name +66)--------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +67)----------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_list_price, customer.c_first_name, customer.c_last_name +68)------------------------Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk +69)--------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_quantity, ws_list_price] +70)--------------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +71)----------------------Projection: date_dim.d_date_sk +72)------------------------Filter: date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(2) +73)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2000), date_dim.d_moy = Int64(2)] +74)------------------SubqueryAlias: frequent_ss_items +75)--------------------Projection: sq1.i_item_sk AS item_sk +76)----------------------Filter: count(Int64(1)) > Int64(4) +77)------------------------Projection: sq1.i_item_sk, count(Int64(1)) +78)--------------------------Aggregate: groupBy=[[sq1.itemdesc, sq1.i_item_sk, date_dim.d_date]], aggr=[[count(Int64(1))]] +79)----------------------------Projection: date_dim.d_date, sq1.itemdesc, sq1.i_item_sk +80)------------------------------Inner Join: store_sales.ss_item_sk = sq1.i_item_sk +81)--------------------------------Projection: store_sales.ss_item_sk, date_dim.d_date +82)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +83)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk] +84)------------------------------------Projection: date_dim.d_date_sk, date_dim.d_date +85)--------------------------------------Filter: date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)]) +86)----------------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_year], partial_filters=[date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)])] +87)--------------------------------SubqueryAlias: sq1 +88)----------------------------------Projection: substr(item.i_item_desc, Int64(1), Int64(30)) AS itemdesc, item.i_item_sk +89)------------------------------------TableScan: item projection=[i_item_sk, i_item_desc] +90)--------------SubqueryAlias: best_ss_customer +91)----------------Projection: customer.c_customer_sk +92)------------------Filter: CAST(sum(store_sales.ss_quantity * store_sales.ss_sales_price) AS Decimal128(38, 15)) > CAST(Float64(0.5) * CAST(max(max_store_sales.tpcds_cmax) AS Float64) AS Decimal128(38, 15)) +93)--------------------Aggregate: groupBy=[[customer.c_customer_sk]], aggr=[[sum(CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)]] +94)----------------------Cross Join: +95)------------------------Projection: store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +96)--------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +97)----------------------------TableScan: store_sales projection=[ss_customer_sk, ss_quantity, ss_sales_price] +98)----------------------------TableScan: customer projection=[c_customer_sk] +99)------------------------SubqueryAlias: max_store_sales +100)--------------------------Projection: max(sq2.csales) AS tpcds_cmax +101)----------------------------Aggregate: groupBy=[[]], aggr=[[max(sq2.csales)]] +102)------------------------------SubqueryAlias: sq2 +103)--------------------------------Projection: sum(store_sales.ss_quantity * store_sales.ss_sales_price) AS csales +104)----------------------------------Aggregate: groupBy=[[customer.c_customer_sk]], aggr=[[sum(CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price)]] +105)------------------------------------Projection: store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +106)--------------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +107)----------------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity, store_sales.ss_sales_price, customer.c_customer_sk +108)------------------------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +109)--------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_quantity, ss_sales_price] +110)--------------------------------------------TableScan: customer projection=[c_customer_sk] +111)----------------------------------------Projection: date_dim.d_date_sk +112)------------------------------------------Filter: date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)]) +113)--------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year IN ([Int64(2000), Int64(2001), Int64(2002), Int64(2003)])] +physical_plan +01)SortPreservingMergeExec: [c_last_name@0 ASC, c_first_name@1 ASC, sales@2 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC, c_first_name@1 ASC, sales@2 ASC], preserve_partitioning=[true] +03)----InterleaveExec +04)------ProjectionExec: expr=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price)@2 as sales] +05)--------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name], aggr=[sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price)] +06)----------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1], 4), input_partitions=4 +07)------------AggregateExec: mode=Partial, gby=[c_last_name@3 as c_last_name, c_first_name@2 as c_first_name], aggr=[sum(catalog_sales.cs_quantity * catalog_sales.cs_list_price)] +08)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(c_customer_sk@0, cs_bill_customer_sk@0)], projection=[cs_quantity@1, cs_list_price@2, c_first_name@3, c_last_name@4] +09)----------------CoalescePartitionsExec +10)------------------FilterExec: CAST(sum(store_sales.ss_quantity * store_sales.ss_sales_price)@1 AS Decimal128(38, 15)) > CAST(0.5 * CAST(max(max_store_sales.tpcds_cmax)@2 AS Float64) AS Decimal128(38, 15)), projection=[c_customer_sk@0] +11)--------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)] +12)----------------------RepartitionExec: partitioning=Hash([c_customer_sk@0], 4), input_partitions=4 +13)------------------------AggregateExec: mode=Partial, gby=[c_customer_sk@2 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)] +14)--------------------------ProjectionExec: expr=[ss_quantity@1 as ss_quantity, ss_sales_price@2 as ss_sales_price, c_customer_sk@3 as c_customer_sk, tpcds_cmax@0 as tpcds_cmax] +15)----------------------------CrossJoinExec +16)------------------------------ProjectionExec: expr=[max(sq2.csales)@0 as tpcds_cmax] +17)--------------------------------AggregateExec: mode=Final, gby=[], aggr=[max(sq2.csales)] +18)----------------------------------CoalescePartitionsExec +19)------------------------------------AggregateExec: mode=Partial, gby=[], aggr=[max(sq2.csales)] +20)--------------------------------------ProjectionExec: expr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)@1 as csales] +21)----------------------------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)] +22)------------------------------------------RepartitionExec: partitioning=Hash([c_customer_sk@0], 4), input_partitions=4 +23)--------------------------------------------AggregateExec: mode=Partial, gby=[c_customer_sk@2 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)] +24)----------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_quantity@2, ss_sales_price@3, c_customer_sk@4] +25)------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 IN (SET) ([2000, 2001, 2002, 2003]) +26)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_sold_date_sk@1, ss_quantity@3, ss_sales_price@4, c_customer_sk@0] +27)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk], file_type=vortex +28)--------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_quantity, ss_sales_price], file_type=vortex +29)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@0)], projection=[ss_quantity@2, ss_sales_price@3, c_customer_sk@0] +30)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk], file_type=vortex +31)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_customer_sk, ss_quantity, ss_sales_price], file_type=vortex +32)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_item_sk@1, item_sk@0)], projection=[cs_bill_customer_sk@0, cs_quantity@2, cs_list_price@3, c_first_name@4, c_last_name@5] +33)------------------CoalescePartitionsExec +34)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_customer_sk@2, cs_item_sk@3, cs_quantity@4, cs_list_price@5, c_first_name@6, c_last_name@7] +35)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 AND d_moy@8 = 2 +36)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[cs_sold_date_sk@3, cs_bill_customer_sk@4, cs_item_sk@5, cs_quantity@6, cs_list_price@7, c_first_name@1, c_last_name@2] +37)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +38)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity, cs_list_price], file_type=vortex +39)------------------ProjectionExec: expr=[i_item_sk@0 as item_sk] +40)--------------------FilterExec: count(Int64(1))@1 > 4, projection=[i_item_sk@0] +41)----------------------ProjectionExec: expr=[i_item_sk@1 as i_item_sk, count(Int64(1))@3 as count(Int64(1))] +42)------------------------AggregateExec: mode=FinalPartitioned, gby=[itemdesc@0 as itemdesc, i_item_sk@1 as i_item_sk, d_date@2 as d_date], aggr=[count(Int64(1))] +43)--------------------------RepartitionExec: partitioning=Hash([itemdesc@0, i_item_sk@1, d_date@2], 4), input_partitions=4 +44)----------------------------AggregateExec: mode=Partial, gby=[itemdesc@1 as itemdesc, i_item_sk@2 as i_item_sk, d_date@0 as d_date], aggr=[count(Int64(1))] +45)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@1, ss_item_sk@0)], projection=[d_date@3, itemdesc@0, i_item_sk@1] +46)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[substr(i_item_desc@4, 1, 30) as itemdesc, i_item_sk], file_type=vortex +47)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, d_date@1] +48)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_year@6 IN (SET) ([2000, 2001, 2002, 2003]) +49)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk], file_type=vortex +50)------ProjectionExec: expr=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, sum(web_sales.ws_quantity * web_sales.ws_list_price)@2 as sales] +51)--------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name], aggr=[sum(web_sales.ws_quantity * web_sales.ws_list_price)] +52)----------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1], 4), input_partitions=4 +53)------------AggregateExec: mode=Partial, gby=[c_last_name@3 as c_last_name, c_first_name@2 as c_first_name], aggr=[sum(web_sales.ws_quantity * web_sales.ws_list_price)] +54)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(c_customer_sk@0, ws_bill_customer_sk@0)], projection=[ws_quantity@1, ws_list_price@2, c_first_name@3, c_last_name@4] +55)----------------CoalescePartitionsExec +56)------------------FilterExec: CAST(sum(store_sales.ss_quantity * store_sales.ss_sales_price)@1 AS Decimal128(38, 15)) > CAST(0.5 * CAST(max(max_store_sales.tpcds_cmax)@2 AS Float64) AS Decimal128(38, 15)), projection=[c_customer_sk@0] +57)--------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)] +58)----------------------RepartitionExec: partitioning=Hash([c_customer_sk@0], 4), input_partitions=4 +59)------------------------AggregateExec: mode=Partial, gby=[c_customer_sk@2 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price), max(max_store_sales.tpcds_cmax)] +60)--------------------------ProjectionExec: expr=[ss_quantity@1 as ss_quantity, ss_sales_price@2 as ss_sales_price, c_customer_sk@3 as c_customer_sk, tpcds_cmax@0 as tpcds_cmax] +61)----------------------------CrossJoinExec +62)------------------------------ProjectionExec: expr=[max(sq2.csales)@0 as tpcds_cmax] +63)--------------------------------AggregateExec: mode=Final, gby=[], aggr=[max(sq2.csales)] +64)----------------------------------CoalescePartitionsExec +65)------------------------------------AggregateExec: mode=Partial, gby=[], aggr=[max(sq2.csales)] +66)--------------------------------------ProjectionExec: expr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)@1 as csales] +67)----------------------------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)] +68)------------------------------------------RepartitionExec: partitioning=Hash([c_customer_sk@0], 4), input_partitions=4 +69)--------------------------------------------AggregateExec: mode=Partial, gby=[c_customer_sk@2 as c_customer_sk], aggr=[sum(store_sales.ss_quantity * store_sales.ss_sales_price)] +70)----------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_quantity@2, ss_sales_price@3, c_customer_sk@4] +71)------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 IN (SET) ([2000, 2001, 2002, 2003]) +72)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_sold_date_sk@1, ss_quantity@3, ss_sales_price@4, c_customer_sk@0] +73)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk], file_type=vortex +74)--------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_quantity, ss_sales_price], file_type=vortex +75)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@0)], projection=[ss_quantity@2, ss_sales_price@3, c_customer_sk@0] +76)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk], file_type=vortex +77)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_customer_sk, ss_quantity, ss_sales_price], file_type=vortex +78)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_item_sk@0, item_sk@0)], projection=[ws_bill_customer_sk@1, ws_quantity@2, ws_list_price@3, c_first_name@4, c_last_name@5] +79)------------------CoalescePartitionsExec +80)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_bill_customer_sk@3, ws_quantity@4, ws_list_price@5, c_first_name@6, c_last_name@7] +81)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 AND d_moy@8 = 2 +82)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@2)], projection=[ws_sold_date_sk@3, ws_item_sk@4, ws_bill_customer_sk@5, ws_quantity@6, ws_list_price@7, c_first_name@1, c_last_name@2] +83)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +84)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_quantity, ws_list_price], file_type=vortex +85)------------------ProjectionExec: expr=[i_item_sk@0 as item_sk] +86)--------------------FilterExec: count(Int64(1))@1 > 4, projection=[i_item_sk@0] +87)----------------------ProjectionExec: expr=[i_item_sk@1 as i_item_sk, count(Int64(1))@3 as count(Int64(1))] +88)------------------------AggregateExec: mode=FinalPartitioned, gby=[itemdesc@0 as itemdesc, i_item_sk@1 as i_item_sk, d_date@2 as d_date], aggr=[count(Int64(1))] +89)--------------------------RepartitionExec: partitioning=Hash([itemdesc@0, i_item_sk@1, d_date@2], 4), input_partitions=4 +90)----------------------------AggregateExec: mode=Partial, gby=[itemdesc@1 as itemdesc, i_item_sk@2 as i_item_sk, d_date@0 as d_date], aggr=[count(Int64(1))] +91)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@1, ss_item_sk@0)], projection=[d_date@3, itemdesc@0, i_item_sk@1] +92)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[substr(i_item_desc@4, 1, 30) as itemdesc, i_item_sk], file_type=vortex +93)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, d_date@1] +94)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_year@6 IN (SET) ([2000, 2001, 2002, 2003]) +95)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no new file mode 100644 index 00000000000..c2738d9a57d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no @@ -0,0 +1,164 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ssales AS + (SELECT c_last_name, + c_first_name, + s_store_name, + ca_state, + s_state, + i_color, + i_current_price, + i_manager_id, + i_units, + i_size, + sum(ss_net_paid) netpaid + FROM store_sales, + store_returns, + store, + item, + customer, + customer_address + WHERE ss_ticket_number = sr_ticket_number + AND ss_item_sk = sr_item_sk + AND ss_customer_sk = c_customer_sk + AND ss_item_sk = i_item_sk + AND ss_store_sk = s_store_sk + AND c_current_addr_sk = ca_address_sk + AND c_birth_country <> upper(ca_country) + AND s_zip = ca_zip + AND s_market_id=8 + GROUP BY c_last_name, + c_first_name, + s_store_name, + ca_state, + s_state, + i_color, + i_current_price, + i_manager_id, + i_units, + i_size) +SELECT c_last_name, + c_first_name, + s_store_name, + sum(netpaid) paid +FROM ssales +WHERE i_color = 'peach' +GROUP BY c_last_name, + c_first_name, + s_store_name +HAVING sum(netpaid) > + (SELECT 0.05*avg(netpaid) + FROM ssales) +ORDER BY c_last_name, + c_first_name, + s_store_name ; +---- +logical_plan +01)Sort: ssales.c_last_name ASC NULLS LAST, ssales.c_first_name ASC NULLS LAST, ssales.s_store_name ASC NULLS LAST +02)--Projection: ssales.c_last_name, ssales.c_first_name, ssales.s_store_name, sum(ssales.netpaid) AS paid +03)----Filter: CAST(sum(ssales.netpaid) AS Decimal128(38, 15)) > () +04)------Subquery: +05)--------Projection: CAST(Float64(0.05) * CAST(avg(ssales.netpaid) AS Float64) AS Decimal128(38, 15)) +06)----------Aggregate: groupBy=[[]], aggr=[[avg(ssales.netpaid)]] +07)------------SubqueryAlias: ssales +08)--------------Projection: sum(store_sales.ss_net_paid) AS netpaid +09)----------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, store.s_store_name, customer_address.ca_state, store.s_state, item.i_color, item.i_current_price, item.i_manager_id, item.i_units, item.i_size]], aggr=[[sum(store_sales.ss_net_paid)]] +10)------------------Projection: store_sales.ss_net_paid, store.s_store_name, store.s_state, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id, customer.c_first_name, customer.c_last_name, customer_address.ca_state +11)--------------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk, store.s_zip = customer_address.ca_zip Filter: customer.c_birth_country != upper(customer_address.ca_country) +12)----------------------Projection: store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name, customer.c_birth_country +13)------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +14)--------------------------Projection: store_sales.ss_customer_sk, store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id +15)----------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +16)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip +17)--------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +18)----------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_net_paid +19)------------------------------------Inner Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk +20)--------------------------------------TableScan: store_sales projection=[ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_paid] +21)--------------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] +22)----------------------------------Projection: store.s_store_sk, store.s_store_name, store.s_state, store.s_zip +23)------------------------------------Filter: store.s_market_id = Int64(8) +24)--------------------------------------TableScan: store projection=[s_store_sk, s_store_name, s_market_id, s_state, s_zip], partial_filters=[store.s_market_id = Int64(8)] +25)------------------------------TableScan: item projection=[i_item_sk, i_current_price, i_size, i_color, i_units, i_manager_id] +26)--------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name, c_birth_country] +27)----------------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_zip, ca_country] +28)------Aggregate: groupBy=[[ssales.c_last_name, ssales.c_first_name, ssales.s_store_name]], aggr=[[sum(ssales.netpaid)]] +29)--------SubqueryAlias: ssales +30)----------Projection: customer.c_last_name, customer.c_first_name, store.s_store_name, sum(store_sales.ss_net_paid) AS netpaid +31)------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, store.s_store_name, customer_address.ca_state, store.s_state, item.i_color, item.i_current_price, item.i_manager_id, item.i_units, item.i_size]], aggr=[[sum(store_sales.ss_net_paid)]] +32)--------------Projection: store_sales.ss_net_paid, store.s_store_name, store.s_state, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id, customer.c_first_name, customer.c_last_name, customer_address.ca_state +33)----------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk, store.s_zip = customer_address.ca_zip Filter: customer.c_birth_country != upper(customer_address.ca_country) +34)------------------Projection: store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name, customer.c_birth_country +35)--------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +36)----------------------Projection: store_sales.ss_customer_sk, store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip, item.i_current_price, item.i_size, item.i_color, item.i_units, item.i_manager_id +37)------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +38)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_net_paid, store.s_store_name, store.s_state, store.s_zip +39)----------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +40)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_net_paid +41)--------------------------------Inner Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk +42)----------------------------------TableScan: store_sales projection=[ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_paid] +43)----------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] +44)------------------------------Projection: store.s_store_sk, store.s_store_name, store.s_state, store.s_zip +45)--------------------------------Filter: store.s_market_id = Int64(8) +46)----------------------------------TableScan: store projection=[s_store_sk, s_store_name, s_market_id, s_state, s_zip], partial_filters=[store.s_market_id = Int64(8)] +47)--------------------------Filter: item.i_color = Utf8View("peach") +48)----------------------------TableScan: item projection=[i_item_sk, i_current_price, i_size, i_color, i_units, i_manager_id], partial_filters=[item.i_color = Utf8View("peach")] +49)----------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name, c_birth_country] +50)------------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_zip, ca_country] +physical_plan +01)ScalarSubqueryExec: subqueries=1 +02)--SortPreservingMergeExec: [c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST] +03)----ProjectionExec: expr=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name, sum(ssales.netpaid)@3 as paid] +04)------SortExec: expr=[c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST], preserve_partitioning=[true] +05)--------FilterExec: CAST(sum(ssales.netpaid)@3 AS Decimal128(38, 15)) > scalar_subquery() +06)----------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name], aggr=[sum(ssales.netpaid)] +07)------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, s_store_name@2], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name], aggr=[sum(ssales.netpaid)] +09)----------------ProjectionExec: expr=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name, sum(store_sales.ss_net_paid)@10 as netpaid] +10)------------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name, ca_state@3 as ca_state, s_state@4 as s_state, i_color@5 as i_color, i_current_price@6 as i_current_price, i_manager_id@7 as i_manager_id, i_units@8 as i_units, i_size@9 as i_size], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([5]) +11)--------------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, s_store_name@2, ca_state@3, s_state@4, i_color@5, i_current_price@6, i_manager_id@7, i_units@8, i_size@9], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[c_last_name@9 as c_last_name, c_first_name@8 as c_first_name, s_store_name@1 as s_store_name, ca_state@10 as ca_state, s_state@2 as s_state, i_color@5 as i_color, i_current_price@3 as i_current_price, i_manager_id@7 as i_manager_id, i_units@6 as i_units, i_size@4 as i_size], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([5]) +13)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_addr_sk@9, ca_address_sk@0), (s_zip@3, ca_zip@2)], filter=c_birth_country@0 != upper(ca_country@1), projection=[ss_net_paid@0, s_store_name@1, s_state@2, i_current_price@4, i_size@5, i_color@6, i_units@7, i_manager_id@8, c_first_name@10, c_last_name@11, ca_state@14] +15)----------------------------CoalescePartitionsExec +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[ss_net_paid@1, s_store_name@2, s_state@3, s_zip@4, i_current_price@5, i_size@6, i_color@7, i_units@8, i_manager_id@9, c_current_addr_sk@11, c_first_name@12, c_last_name@13, c_birth_country@14] +17)--------------------------------CoalescePartitionsExec +18)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_customer_sk@1, ss_net_paid@2, s_store_name@3, s_state@4, s_zip@5, i_current_price@7, i_size@8, i_color@9, i_units@10, i_manager_id@11] +19)------------------------------------CoalescePartitionsExec +20)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[ss_item_sk@4, ss_customer_sk@5, ss_net_paid@7, s_store_name@1, s_state@2, s_zip@3] +21)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_state, s_zip], file_type=vortex, predicate: s_market_id@10 = 8 +22)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_ticket_number@1, ss_ticket_number@3), (sr_item_sk@0, ss_item_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_store_sk@4, ss_net_paid@6] +23)------------------------------------------CoalescePartitionsExec +24)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number], file_type=vortex +25)------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_paid], file_type=vortex +26)------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +27)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_current_price, i_size, i_color, i_units, i_manager_id], file_type=vortex, predicate: i_color@17 = peach +28)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +29)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name, c_birth_country], file_type=vortex +30)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip, ca_country], file_type=vortex +31)--ProjectionExec: expr=[CAST(0.05 * CAST(avg(ssales.netpaid)@0 AS Float64) AS Decimal128(38, 15)) as Float64(0.05) * avg(ssales.netpaid)] +32)----AggregateExec: mode=Final, gby=[], aggr=[avg(ssales.netpaid)] +33)------CoalescePartitionsExec +34)--------AggregateExec: mode=Partial, gby=[], aggr=[avg(ssales.netpaid)] +35)----------ProjectionExec: expr=[sum(store_sales.ss_net_paid)@10 as netpaid] +36)------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, s_store_name@2 as s_store_name, ca_state@3 as ca_state, s_state@4 as s_state, i_color@5 as i_color, i_current_price@6 as i_current_price, i_manager_id@7 as i_manager_id, i_units@8 as i_units, i_size@9 as i_size], aggr=[sum(store_sales.ss_net_paid)] +37)--------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, s_store_name@2, ca_state@3, s_state@4, i_color@5, i_current_price@6, i_manager_id@7, i_units@8, i_size@9], 4), input_partitions=4 +38)----------------AggregateExec: mode=Partial, gby=[c_last_name@9 as c_last_name, c_first_name@8 as c_first_name, s_store_name@1 as s_store_name, ca_state@10 as ca_state, s_state@2 as s_state, i_color@5 as i_color, i_current_price@3 as i_current_price, i_manager_id@7 as i_manager_id, i_units@6 as i_units, i_size@4 as i_size], aggr=[sum(store_sales.ss_net_paid)] +39)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +40)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_addr_sk@9, ca_address_sk@0), (s_zip@3, ca_zip@2)], filter=c_birth_country@0 != upper(ca_country@1), projection=[ss_net_paid@0, s_store_name@1, s_state@2, i_current_price@4, i_size@5, i_color@6, i_units@7, i_manager_id@8, c_first_name@10, c_last_name@11, ca_state@14] +41)----------------------CoalescePartitionsExec +42)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[ss_net_paid@1, s_store_name@2, s_state@3, s_zip@4, i_current_price@5, i_size@6, i_color@7, i_units@8, i_manager_id@9, c_current_addr_sk@11, c_first_name@12, c_last_name@13, c_birth_country@14] +43)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_customer_sk@1, ss_net_paid@2, s_store_name@3, s_state@4, s_zip@5, i_current_price@7, i_size@8, i_color@9, i_units@10, i_manager_id@11] +44)----------------------------CoalescePartitionsExec +45)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[ss_item_sk@4, ss_customer_sk@5, ss_net_paid@7, s_store_name@1, s_state@2, s_zip@3] +46)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_state, s_zip], file_type=vortex, predicate: s_market_id@10 = 8 +47)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_ticket_number@1, ss_ticket_number@3), (sr_item_sk@0, ss_item_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_store_sk@4, ss_net_paid@6] +48)----------------------------------CoalescePartitionsExec +49)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number], file_type=vortex +50)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_paid], file_type=vortex +51)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_current_price, i_size, i_color, i_units, i_manager_id], file_type=vortex +52)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +53)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name, c_birth_country], file_type=vortex +54)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip, ca_country], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no new file mode 100644 index 00000000000..c9632f922ff --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no @@ -0,0 +1,109 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id , + i_item_desc , + s_store_id , + s_store_name , + sum(ss_net_profit) AS store_sales_profit , + sum(sr_net_loss) AS store_returns_loss , + sum(cs_net_profit) AS catalog_sales_profit +FROM store_sales , + store_returns , + catalog_sales , + date_dim d1 , + date_dim d2 , + date_dim d3 , + store , + item +WHERE d1.d_moy = 4 + AND d1.d_year = 2001 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_moy BETWEEN 4 AND 10 + AND d2.d_year = 2001 + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_moy BETWEEN 4 AND 10 + AND d3.d_year = 2001 +GROUP BY i_item_id , + i_item_desc , + s_store_id , + s_store_name +ORDER BY i_item_id , + i_item_desc , + s_store_id , + s_store_name +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST, fetch=100 +02)--Projection: item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, sum(store_sales.ss_net_profit) AS store_sales_profit, sum(store_returns.sr_net_loss) AS store_returns_loss, sum(catalog_sales.cs_net_profit) AS catalog_sales_profit +03)----Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name]], aggr=[[sum(store_sales.ss_net_profit), sum(store_returns.sr_net_loss), sum(catalog_sales.cs_net_profit)]] +04)------Projection: store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit, store.s_store_id, store.s_store_name, item.i_item_id, item.i_item_desc +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: store_sales.ss_item_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit, store.s_store_id, store.s_store_name +07)------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +08)--------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit +09)----------------Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk +10)------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit +11)--------------------Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit +13)------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +14)--------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit +15)----------------------------Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk +16)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_net_loss +17)--------------------------------Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +18)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_profit] +19)----------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_net_loss] +20)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_net_profit] +21)--------------------------SubqueryAlias: d1 +22)----------------------------Projection: date_dim.d_date_sk +23)------------------------------Filter: date_dim.d_moy = Int64(4) AND date_dim.d_year = Int64(2001) +24)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(4), date_dim.d_year = Int64(2001)] +25)----------------------SubqueryAlias: d2 +26)------------------------Projection: date_dim.d_date_sk +27)--------------------------Filter: date_dim.d_moy >= Int64(4) AND date_dim.d_moy <= Int64(10) AND date_dim.d_year = Int64(2001) +28)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy >= Int64(4), date_dim.d_moy <= Int64(10), date_dim.d_year = Int64(2001)] +29)------------------SubqueryAlias: d3 +30)--------------------Projection: date_dim.d_date_sk +31)----------------------Filter: date_dim.d_moy >= Int64(4) AND date_dim.d_moy <= Int64(10) AND date_dim.d_year = Int64(2001) +32)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy >= Int64(4), date_dim.d_moy <= Int64(10), date_dim.d_year = Int64(2001)] +33)--------------TableScan: store projection=[s_store_sk, s_store_id, s_store_name] +34)----------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name, sum(store_sales.ss_net_profit)@4 as store_sales_profit, sum(store_returns.sr_net_loss)@5 as store_returns_loss, sum(catalog_sales.cs_net_profit)@6 as catalog_sales_profit] +03)----SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name], aggr=[sum(store_sales.ss_net_profit), sum(store_returns.sr_net_loss), sum(catalog_sales.cs_net_profit)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_store_id@2, s_store_name@3], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_id@5 as i_item_id, i_item_desc@6 as i_item_desc, s_store_id@3 as s_store_id, s_store_name@4 as s_store_name], aggr=[sum(store_sales.ss_net_profit), sum(store_returns.sr_net_loss), sum(catalog_sales.cs_net_profit)] +07)------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_net_profit@1, sr_net_loss@2, cs_net_profit@3, s_store_id@4, s_store_name@5, i_item_id@7, i_item_desc@8] +09)----------------CoalescePartitionsExec +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@3, ss_net_profit@5, sr_net_loss@6, cs_net_profit@7, s_store_id@1, s_store_name@2] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id, s_store_name], file_type=vortex +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@4)], projection=[ss_item_sk@1, ss_store_sk@2, ss_net_profit@3, sr_net_loss@4, cs_net_profit@6] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 >= 4 AND d_moy@8 <= 10 AND d_year@6 = 2001 +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@3)], projection=[ss_item_sk@1, ss_store_sk@2, ss_net_profit@3, sr_net_loss@5, cs_sold_date_sk@6, cs_net_profit@7] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 >= 4 AND d_moy@8 <= 10 AND d_year@6 = 2001 +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_net_profit@4, sr_returned_date_sk@5, sr_net_loss@6, cs_sold_date_sk@7, cs_net_profit@8] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 4 AND d_year@6 = 2001 +18)--------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@1, sr_customer_sk@6), (cs_item_sk@2, sr_item_sk@5)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_store_sk@6, ss_net_profit@7, sr_returned_date_sk@8, sr_net_loss@11, cs_sold_date_sk@0, cs_net_profit@3] +19)----------------------------RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 4), input_partitions=4 +20)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_net_profit], file_type=vortex +21)----------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 4), input_partitions=4 +22)------------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@2, ss_customer_sk@2), (sr_item_sk@1, ss_item_sk@1), (sr_ticket_number@3, ss_ticket_number@4)], projection=[ss_sold_date_sk@5, ss_item_sk@6, ss_store_sk@8, ss_net_profit@10, sr_returned_date_sk@0, sr_item_sk@1, sr_customer_sk@2, sr_net_loss@4] +23)--------------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 4), input_partitions=4 +24)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_net_loss], file_type=vortex +25)--------------------------------RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 4), input_partitions=4 +26)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_profit], file_type=vortex +27)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no new file mode 100644 index 00000000000..9f152c4410b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + avg(cs_quantity) agg1, + avg(cs_list_price) agg2, + avg(cs_coupon_amt) agg3, + avg(cs_sales_price) agg4 +FROM catalog_sales, + customer_demographics, + date_dim, + item, + promotion +WHERE cs_sold_date_sk = d_date_sk + AND cs_item_sk = i_item_sk + AND cs_bill_cdemo_sk = cd_demo_sk + AND cs_promo_sk = p_promo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND (p_channel_email = 'N' + OR p_channel_event = 'N') + AND d_year = 2000 +GROUP BY i_item_id +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, fetch=100 +02)--Projection: item.i_item_id, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4 +03)----Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(CAST(catalog_sales.cs_quantity AS Float64)), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)]] +04)------Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, item.i_item_id +05)--------Inner Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk +06)----------Projection: catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, item.i_item_id +07)------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +08)--------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt +09)----------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +10)------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt +11)--------------------Inner Join: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk +12)----------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_cdemo_sk, cs_item_sk, cs_promo_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt] +13)----------------------Projection: customer_demographics.cd_demo_sk +14)------------------------Filter: customer_demographics.cd_gender = Utf8View("M") AND customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +15)--------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_gender = Utf8View("M"), customer_demographics.cd_marital_status = Utf8View("S"), customer_demographics.cd_education_status = Utf8View("College")] +16)------------------Projection: date_dim.d_date_sk +17)--------------------Filter: date_dim.d_year = Int64(2000) +18)----------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +19)--------------TableScan: item projection=[i_item_sk, i_item_id] +20)----------Projection: promotion.p_promo_sk +21)------------Filter: promotion.p_channel_email = Utf8View("N") OR promotion.p_channel_event = Utf8View("N") +22)--------------TableScan: promotion projection=[p_promo_sk, p_channel_email, p_channel_event], partial_filters=[promotion.p_channel_email = Utf8View("N") OR promotion.p_channel_event = Utf8View("N")] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, avg(catalog_sales.cs_quantity)@1 as agg1, avg(catalog_sales.cs_list_price)@2 as agg2, avg(catalog_sales.cs_coupon_amt)@3 as agg3, avg(catalog_sales.cs_sales_price)@4 as agg4] +03)----SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_id@4 as i_item_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, cs_promo_sk@0)], projection=[cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, i_item_id@6] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_email@9 = N OR p_channel_event@14 = N +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@0)], projection=[cs_promo_sk@3, cs_quantity@4, cs_list_price@5, cs_sales_price@6, cs_coupon_amt@7, i_item_id@1] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@2, cs_promo_sk@3, cs_quantity@4, cs_list_price@5, cs_sales_price@6, cs_coupon_amt@7] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, cs_bill_cdemo_sk@1)], projection=[cs_sold_date_sk@1, cs_item_sk@3, cs_promo_sk@4, cs_quantity@5, cs_list_price@6, cs_sales_price@7, cs_coupon_amt@8] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_gender@1 = M AND cd_marital_status@2 = S AND cd_education_status@3 = College +15)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_cdemo_sk, cs_item_sk, cs_promo_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no new file mode 100644 index 00000000000..182b9886de8 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no @@ -0,0 +1,181 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH results AS + (SELECT i_item_id, + s_state, + 0 AS g_state, + ss_quantity agg1, + ss_list_price agg2, + ss_coupon_amt agg3, + ss_sales_price agg4 + FROM store_sales, + customer_demographics, + date_dim, + store, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND ss_store_sk = s_store_sk + AND ss_cdemo_sk = cd_demo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND d_year = 2002 + AND s_state = 'TN' ) +SELECT i_item_id, + s_state, + g_state, + agg1, + agg2, + agg3, + agg4 +FROM + ( SELECT i_item_id, + s_state, + 0 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results + GROUP BY i_item_id , + s_state + UNION ALL SELECT i_item_id, + NULL AS s_state, + 1 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results + GROUP BY i_item_id + UNION ALL SELECT NULL AS i_item_id, + NULL AS s_state, + 1 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results ) foo +ORDER BY i_item_id NULLS FIRST, + s_state NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: foo.i_item_id ASC NULLS FIRST, foo.s_state ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: foo +03)----Union +04)------Projection: results.i_item_id, results.s_state, Int64(0) AS g_state, avg(results.agg1) AS agg1, avg(results.agg2) AS agg2, avg(results.agg3) AS agg3, avg(results.agg4) AS agg4 +05)--------Aggregate: groupBy=[[results.i_item_id, results.s_state]], aggr=[[avg(CAST(results.agg1 AS Float64)), avg(results.agg2), avg(results.agg3), avg(results.agg4)]] +06)----------SubqueryAlias: results +07)------------Projection: item.i_item_id, store.s_state, store_sales.ss_quantity AS agg1, store_sales.ss_list_price AS agg2, store_sales.ss_coupon_amt AS agg3, store_sales.ss_sales_price AS agg4 +08)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +09)----------------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, store.s_state +10)------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +11)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +12)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +13)------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +14)--------------------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk +15)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] +16)----------------------------Projection: customer_demographics.cd_demo_sk +17)------------------------------Filter: customer_demographics.cd_gender = Utf8View("M") AND customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +18)--------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_gender = Utf8View("M"), customer_demographics.cd_marital_status = Utf8View("S"), customer_demographics.cd_education_status = Utf8View("College")] +19)------------------------Projection: date_dim.d_date_sk +20)--------------------------Filter: date_dim.d_year = Int64(2002) +21)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +22)--------------------Filter: store.s_state = Utf8View("TN") +23)----------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +24)----------------TableScan: item projection=[i_item_sk, i_item_id] +25)------Projection: results.i_item_id, Utf8View(NULL) AS s_state, Int64(1) AS g_state, avg(results.agg1) AS agg1, avg(results.agg2) AS agg2, avg(results.agg3) AS agg3, avg(results.agg4) AS agg4 +26)--------Aggregate: groupBy=[[results.i_item_id]], aggr=[[avg(CAST(results.agg1 AS Float64)), avg(results.agg2), avg(results.agg3), avg(results.agg4)]] +27)----------SubqueryAlias: results +28)------------Projection: item.i_item_id, store_sales.ss_quantity AS agg1, store_sales.ss_list_price AS agg2, store_sales.ss_coupon_amt AS agg3, store_sales.ss_sales_price AS agg4 +29)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +30)----------------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +31)------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +32)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +33)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +34)------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +35)--------------------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk +36)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] +37)----------------------------Projection: customer_demographics.cd_demo_sk +38)------------------------------Filter: customer_demographics.cd_gender = Utf8View("M") AND customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +39)--------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_gender = Utf8View("M"), customer_demographics.cd_marital_status = Utf8View("S"), customer_demographics.cd_education_status = Utf8View("College")] +40)------------------------Projection: date_dim.d_date_sk +41)--------------------------Filter: date_dim.d_year = Int64(2002) +42)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +43)--------------------Projection: store.s_store_sk +44)----------------------Filter: store.s_state = Utf8View("TN") +45)------------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +46)----------------TableScan: item projection=[i_item_sk, i_item_id] +47)------Projection: Utf8View(NULL) AS i_item_id, Utf8View(NULL) AS s_state, Int64(1) AS g_state, avg(results.agg1) AS agg1, avg(results.agg2) AS agg2, avg(results.agg3) AS agg3, avg(results.agg4) AS agg4 +48)--------Aggregate: groupBy=[[]], aggr=[[avg(CAST(results.agg1 AS Float64)), avg(results.agg2), avg(results.agg3), avg(results.agg4)]] +49)----------SubqueryAlias: results +50)------------Projection: store_sales.ss_quantity AS agg1, store_sales.ss_list_price AS agg2, store_sales.ss_coupon_amt AS agg3, store_sales.ss_sales_price AS agg4 +51)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +52)----------------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +53)------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +54)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +55)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +56)------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +57)--------------------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk +58)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] +59)----------------------------Projection: customer_demographics.cd_demo_sk +60)------------------------------Filter: customer_demographics.cd_gender = Utf8View("M") AND customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +61)--------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_gender = Utf8View("M"), customer_demographics.cd_marital_status = Utf8View("S"), customer_demographics.cd_education_status = Utf8View("College")] +62)------------------------Projection: date_dim.d_date_sk +63)--------------------------Filter: date_dim.d_year = Int64(2002) +64)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +65)--------------------Projection: store.s_store_sk +66)----------------------Filter: store.s_state = Utf8View("TN") +67)------------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +68)----------------TableScan: item projection=[i_item_sk] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC, s_state@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC], preserve_partitioning=[true] +03)----UnionExec +04)------ProjectionExec: expr=[i_item_id@0 as i_item_id, s_state@1 as s_state, 0 as g_state, avg(results.agg1)@2 as agg1, avg(results.agg2)@3 as agg2, avg(results.agg3)@4 as agg3, avg(results.agg4)@5 as agg4] +05)--------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, s_state@1 as s_state], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)], ordering_mode=PartiallySorted([1]) +06)----------RepartitionExec: partitioning=Hash([i_item_id@0, s_state@1], 4), input_partitions=4 +07)------------AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id, s_state@1 as s_state], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)], ordering_mode=PartiallySorted([1]) +08)--------------ProjectionExec: expr=[i_item_id@0 as i_item_id, s_state@1 as s_state, ss_quantity@2 as agg1, ss_list_price@3 as agg2, ss_coupon_amt@4 as agg3, ss_sales_price@5 as agg4] +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[i_item_id@1, s_state@7, ss_quantity@3, ss_list_price@4, ss_coupon_amt@6, ss_sales_price@5] +10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +11)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@2, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7, s_state@1] +12)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_state], file_type=vortex, predicate: s_state@24 = TN +13)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] +14)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 +15)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@2)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_store_sk@4, ss_quantity@5, ss_list_price@6, ss_sales_price@7, ss_coupon_amt@8] +16)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_gender@1 = M AND cd_marital_status@2 = S AND cd_education_status@3 = College +17)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt], file_type=vortex +18)------ProjectionExec: expr=[i_item_id@0 as i_item_id, NULL as s_state, 1 as g_state, avg(results.agg1)@1 as agg1, avg(results.agg2)@2 as agg2, avg(results.agg3)@3 as agg3, avg(results.agg4)@4 as agg4] +19)--------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)] +20)----------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +21)------------AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)] +22)--------------ProjectionExec: expr=[i_item_id@0 as i_item_id, ss_quantity@1 as agg1, ss_list_price@2 as agg2, ss_coupon_amt@3 as agg3, ss_sales_price@4 as agg4] +23)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[i_item_id@1, ss_quantity@3, ss_list_price@4, ss_coupon_amt@6, ss_sales_price@5] +24)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +25)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@1, ss_quantity@3, ss_list_price@4, ss_sales_price@5, ss_coupon_amt@6] +26)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +27)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] +28)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 +29)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@2)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_store_sk@4, ss_quantity@5, ss_list_price@6, ss_sales_price@7, ss_coupon_amt@8] +30)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_gender@1 = M AND cd_marital_status@2 = S AND cd_education_status@3 = College +31)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt], file_type=vortex +32)------ProjectionExec: expr=[NULL as i_item_id, NULL as s_state, 1 as g_state, avg(results.agg1)@0 as agg1, avg(results.agg2)@1 as agg2, avg(results.agg3)@2 as agg3, avg(results.agg4)@3 as agg4] +33)--------AggregateExec: mode=Final, gby=[], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)] +34)----------CoalescePartitionsExec +35)------------AggregateExec: mode=Partial, gby=[], aggr=[avg(results.agg1), avg(results.agg2), avg(results.agg3), avg(results.agg4)] +36)--------------ProjectionExec: expr=[ss_quantity@0 as agg1, ss_list_price@1 as agg2, ss_coupon_amt@2 as agg3, ss_sales_price@3 as agg4] +37)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_quantity@2, ss_list_price@3, ss_coupon_amt@5, ss_sales_price@4] +38)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex +39)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@1, ss_quantity@3, ss_list_price@4, ss_sales_price@5, ss_coupon_amt@6] +40)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +41)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] +42)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 +43)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@2)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_store_sk@4, ss_quantity@5, ss_list_price@6, ss_sales_price@7, ss_coupon_amt@8] +44)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_gender@1 = M AND cd_marital_status@2 = S AND cd_education_status@3 = College +45)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q28.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q28.slt.no new file mode 100644 index 00000000000..545b0525138 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q28.slt.no @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT avg(ss_list_price) B1_LP, + count(ss_list_price) B1_CNT, + count(DISTINCT ss_list_price) B1_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 0 AND 5 + AND (ss_list_price BETWEEN 8 AND 8+10 + OR ss_coupon_amt BETWEEN 459 AND 459+1000 + OR ss_wholesale_cost BETWEEN 57 AND 57+20)) B1, + (SELECT avg(ss_list_price) B2_LP, + count(ss_list_price) B2_CNT, + count(DISTINCT ss_list_price) B2_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 6 AND 10 + AND (ss_list_price BETWEEN 90 AND 90+10 + OR ss_coupon_amt BETWEEN 2323 AND 2323+1000 + OR ss_wholesale_cost BETWEEN 31 AND 31+20)) B2, + (SELECT avg(ss_list_price) B3_LP, + count(ss_list_price) B3_CNT, + count(DISTINCT ss_list_price) B3_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 11 AND 15 + AND (ss_list_price BETWEEN 142 AND 142+10 + OR ss_coupon_amt BETWEEN 12214 AND 12214+1000 + OR ss_wholesale_cost BETWEEN 79 AND 79+20)) B3, + (SELECT avg(ss_list_price) B4_LP, + count(ss_list_price) B4_CNT, + count(DISTINCT ss_list_price) B4_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 16 AND 20 + AND (ss_list_price BETWEEN 135 AND 135+10 + OR ss_coupon_amt BETWEEN 6071 AND 6071+1000 + OR ss_wholesale_cost BETWEEN 38 AND 38+20)) B4, + (SELECT avg(ss_list_price) B5_LP, + count(ss_list_price) B5_CNT, + count(DISTINCT ss_list_price) B5_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 25 + AND (ss_list_price BETWEEN 122 AND 122+10 + OR ss_coupon_amt BETWEEN 836 AND 836+1000 + OR ss_wholesale_cost BETWEEN 17 AND 17+20)) B5, + (SELECT avg(ss_list_price) B6_LP, + count(ss_list_price) B6_CNT, + count(DISTINCT ss_list_price) B6_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 26 AND 30 + AND (ss_list_price BETWEEN 154 AND 154+10 + OR ss_coupon_amt BETWEEN 7326 AND 7326+1000 + OR ss_wholesale_cost BETWEEN 7 AND 7+20)) B6 +LIMIT 100; +---- +logical_plan +01)Limit: skip=0, fetch=100 +02)--Cross Join: +03)----Limit: skip=0, fetch=100 +04)------Cross Join: +05)--------Limit: skip=0, fetch=100 +06)----------Cross Join: +07)------------Limit: skip=0, fetch=100 +08)--------------Cross Join: +09)----------------Limit: skip=0, fetch=100 +10)------------------Cross Join: +11)--------------------SubqueryAlias: b1 +12)----------------------Projection: avg(store_sales.ss_list_price) AS b1_lp, count(store_sales.ss_list_price) AS b1_cnt, count(DISTINCT store_sales.ss_list_price) AS b1_cntd +13)------------------------Limit: skip=0, fetch=100 +14)--------------------------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +15)----------------------------Projection: store_sales.ss_list_price +16)------------------------------Filter: store_sales.ss_quantity >= Int64(0) AND store_sales.ss_quantity <= Int64(5) AND (store_sales.ss_list_price >= Decimal128(8.00,7,2) AND store_sales.ss_list_price <= Decimal128(18.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(459.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(1459.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(57.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(77.00,7,2)) +17)--------------------------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(0), store_sales.ss_quantity <= Int64(5), store_sales.ss_list_price >= Decimal128(8.00,7,2) AND store_sales.ss_list_price <= Decimal128(18.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(459.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(1459.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(57.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(77.00,7,2)] +18)--------------------SubqueryAlias: b2 +19)----------------------Projection: avg(store_sales.ss_list_price) AS b2_lp, count(store_sales.ss_list_price) AS b2_cnt, count(DISTINCT store_sales.ss_list_price) AS b2_cntd +20)------------------------Limit: skip=0, fetch=100 +21)--------------------------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +22)----------------------------Projection: store_sales.ss_list_price +23)------------------------------Filter: store_sales.ss_quantity >= Int64(6) AND store_sales.ss_quantity <= Int64(10) AND (store_sales.ss_list_price >= Decimal128(90.00,7,2) AND store_sales.ss_list_price <= Decimal128(100.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(2323.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(3323.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(31.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(51.00,7,2)) +24)--------------------------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(6), store_sales.ss_quantity <= Int64(10), store_sales.ss_list_price >= Decimal128(90.00,7,2) AND store_sales.ss_list_price <= Decimal128(100.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(2323.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(3323.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(31.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(51.00,7,2)] +25)----------------SubqueryAlias: b3 +26)------------------Projection: avg(store_sales.ss_list_price) AS b3_lp, count(store_sales.ss_list_price) AS b3_cnt, count(DISTINCT store_sales.ss_list_price) AS b3_cntd +27)--------------------Limit: skip=0, fetch=100 +28)----------------------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +29)------------------------Projection: store_sales.ss_list_price +30)--------------------------Filter: store_sales.ss_quantity >= Int64(11) AND store_sales.ss_quantity <= Int64(15) AND (store_sales.ss_list_price >= Decimal128(142.00,7,2) AND store_sales.ss_list_price <= Decimal128(152.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(12214.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(13214.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(79.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(99.00,7,2)) +31)----------------------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(11), store_sales.ss_quantity <= Int64(15), store_sales.ss_list_price >= Decimal128(142.00,7,2) AND store_sales.ss_list_price <= Decimal128(152.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(12214.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(13214.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(79.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(99.00,7,2)] +32)------------SubqueryAlias: b4 +33)--------------Projection: avg(store_sales.ss_list_price) AS b4_lp, count(store_sales.ss_list_price) AS b4_cnt, count(DISTINCT store_sales.ss_list_price) AS b4_cntd +34)----------------Limit: skip=0, fetch=100 +35)------------------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +36)--------------------Projection: store_sales.ss_list_price +37)----------------------Filter: store_sales.ss_quantity >= Int64(16) AND store_sales.ss_quantity <= Int64(20) AND (store_sales.ss_list_price >= Decimal128(135.00,7,2) AND store_sales.ss_list_price <= Decimal128(145.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(6071.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(7071.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(38.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(58.00,7,2)) +38)------------------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(16), store_sales.ss_quantity <= Int64(20), store_sales.ss_list_price >= Decimal128(135.00,7,2) AND store_sales.ss_list_price <= Decimal128(145.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(6071.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(7071.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(38.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(58.00,7,2)] +39)--------SubqueryAlias: b5 +40)----------Projection: avg(store_sales.ss_list_price) AS b5_lp, count(store_sales.ss_list_price) AS b5_cnt, count(DISTINCT store_sales.ss_list_price) AS b5_cntd +41)------------Limit: skip=0, fetch=100 +42)--------------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +43)----------------Projection: store_sales.ss_list_price +44)------------------Filter: store_sales.ss_quantity >= Int64(21) AND store_sales.ss_quantity <= Int64(25) AND (store_sales.ss_list_price >= Decimal128(122.00,7,2) AND store_sales.ss_list_price <= Decimal128(132.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(836.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(1836.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(17.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(37.00,7,2)) +45)--------------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(21), store_sales.ss_quantity <= Int64(25), store_sales.ss_list_price >= Decimal128(122.00,7,2) AND store_sales.ss_list_price <= Decimal128(132.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(836.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(1836.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(17.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(37.00,7,2)] +46)----SubqueryAlias: b6 +47)------Projection: avg(store_sales.ss_list_price) AS b6_lp, count(store_sales.ss_list_price) AS b6_cnt, count(DISTINCT store_sales.ss_list_price) AS b6_cntd +48)--------Limit: skip=0, fetch=100 +49)----------Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] +50)------------Projection: store_sales.ss_list_price +51)--------------Filter: store_sales.ss_quantity >= Int64(26) AND store_sales.ss_quantity <= Int64(30) AND (store_sales.ss_list_price >= Decimal128(154.00,7,2) AND store_sales.ss_list_price <= Decimal128(164.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(7326.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(8326.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(7.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(27.00,7,2)) +52)----------------TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt], partial_filters=[store_sales.ss_quantity >= Int64(26), store_sales.ss_quantity <= Int64(30), store_sales.ss_list_price >= Decimal128(154.00,7,2) AND store_sales.ss_list_price <= Decimal128(164.00,7,2) OR store_sales.ss_coupon_amt >= Decimal128(7326.00,7,2) AND store_sales.ss_coupon_amt <= Decimal128(8326.00,7,2) OR store_sales.ss_wholesale_cost >= Decimal128(7.00,7,2) AND store_sales.ss_wholesale_cost <= Decimal128(27.00,7,2)] +physical_plan +01)ProjectionExec: expr=[b1_lp@3 as b1_lp, b1_cnt@4 as b1_cnt, b1_cntd@5 as b1_cntd, b2_lp@6 as b2_lp, b2_cnt@7 as b2_cnt, b2_cntd@8 as b2_cntd, b3_lp@9 as b3_lp, b3_cnt@10 as b3_cnt, b3_cntd@11 as b3_cntd, b4_lp@12 as b4_lp, b4_cnt@13 as b4_cnt, b4_cntd@14 as b4_cntd, b5_lp@15 as b5_lp, b5_cnt@16 as b5_cnt, b5_cntd@17 as b5_cntd, b6_lp@0 as b6_lp, b6_cnt@1 as b6_cnt, b6_cntd@2 as b6_cntd] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----CrossJoinExec +04)------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b6_lp, count(store_sales.ss_list_price)@1 as b6_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b6_cntd] +05)--------GlobalLimitExec: skip=0, fetch=100 +06)----------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +07)------------CoalescePartitionsExec +08)--------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +09)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 26 AND ss_quantity@10 <= 30 AND (ss_list_price@12 >= 154.00 AND ss_list_price@12 <= 164.00 OR ss_coupon_amt@19 >= 7326.00 AND ss_coupon_amt@19 <= 8326.00 OR ss_wholesale_cost@11 >= 7.00 AND ss_wholesale_cost@11 <= 27.00) +10)------ProjectionExec: expr=[b1_lp@3 as b1_lp, b1_cnt@4 as b1_cnt, b1_cntd@5 as b1_cntd, b2_lp@6 as b2_lp, b2_cnt@7 as b2_cnt, b2_cntd@8 as b2_cntd, b3_lp@9 as b3_lp, b3_cnt@10 as b3_cnt, b3_cntd@11 as b3_cntd, b4_lp@12 as b4_lp, b4_cnt@13 as b4_cnt, b4_cntd@14 as b4_cntd, b5_lp@0 as b5_lp, b5_cnt@1 as b5_cnt, b5_cntd@2 as b5_cntd] +11)--------GlobalLimitExec: skip=0, fetch=100 +12)----------CrossJoinExec +13)------------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b5_lp, count(store_sales.ss_list_price)@1 as b5_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b5_cntd] +14)--------------GlobalLimitExec: skip=0, fetch=100 +15)----------------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +16)------------------CoalescePartitionsExec +17)--------------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +18)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 21 AND ss_quantity@10 <= 25 AND (ss_list_price@12 >= 122.00 AND ss_list_price@12 <= 132.00 OR ss_coupon_amt@19 >= 836.00 AND ss_coupon_amt@19 <= 1836.00 OR ss_wholesale_cost@11 >= 17.00 AND ss_wholesale_cost@11 <= 37.00) +19)------------ProjectionExec: expr=[b1_lp@3 as b1_lp, b1_cnt@4 as b1_cnt, b1_cntd@5 as b1_cntd, b2_lp@6 as b2_lp, b2_cnt@7 as b2_cnt, b2_cntd@8 as b2_cntd, b3_lp@9 as b3_lp, b3_cnt@10 as b3_cnt, b3_cntd@11 as b3_cntd, b4_lp@0 as b4_lp, b4_cnt@1 as b4_cnt, b4_cntd@2 as b4_cntd] +20)--------------GlobalLimitExec: skip=0, fetch=100 +21)----------------CrossJoinExec +22)------------------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b4_lp, count(store_sales.ss_list_price)@1 as b4_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b4_cntd] +23)--------------------GlobalLimitExec: skip=0, fetch=100 +24)----------------------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +25)------------------------CoalescePartitionsExec +26)--------------------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +27)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 16 AND ss_quantity@10 <= 20 AND (ss_list_price@12 >= 135.00 AND ss_list_price@12 <= 145.00 OR ss_coupon_amt@19 >= 6071.00 AND ss_coupon_amt@19 <= 7071.00 OR ss_wholesale_cost@11 >= 38.00 AND ss_wholesale_cost@11 <= 58.00) +28)------------------ProjectionExec: expr=[b1_lp@3 as b1_lp, b1_cnt@4 as b1_cnt, b1_cntd@5 as b1_cntd, b2_lp@6 as b2_lp, b2_cnt@7 as b2_cnt, b2_cntd@8 as b2_cntd, b3_lp@0 as b3_lp, b3_cnt@1 as b3_cnt, b3_cntd@2 as b3_cntd] +29)--------------------GlobalLimitExec: skip=0, fetch=100 +30)----------------------CrossJoinExec +31)------------------------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b3_lp, count(store_sales.ss_list_price)@1 as b3_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b3_cntd] +32)--------------------------GlobalLimitExec: skip=0, fetch=100 +33)----------------------------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +34)------------------------------CoalescePartitionsExec +35)--------------------------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +36)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 11 AND ss_quantity@10 <= 15 AND (ss_list_price@12 >= 142.00 AND ss_list_price@12 <= 152.00 OR ss_coupon_amt@19 >= 12214.00 AND ss_coupon_amt@19 <= 13214.00 OR ss_wholesale_cost@11 >= 79.00 AND ss_wholesale_cost@11 <= 99.00) +37)------------------------GlobalLimitExec: skip=0, fetch=100 +38)--------------------------CrossJoinExec +39)----------------------------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b1_lp, count(store_sales.ss_list_price)@1 as b1_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b1_cntd] +40)------------------------------GlobalLimitExec: skip=0, fetch=100 +41)--------------------------------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +42)----------------------------------CoalescePartitionsExec +43)------------------------------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +44)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 0 AND ss_quantity@10 <= 5 AND (ss_list_price@12 >= 8.00 AND ss_list_price@12 <= 18.00 OR ss_coupon_amt@19 >= 459.00 AND ss_coupon_amt@19 <= 1459.00 OR ss_wholesale_cost@11 >= 57.00 AND ss_wholesale_cost@11 <= 77.00) +45)----------------------------ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as b2_lp, count(store_sales.ss_list_price)@1 as b2_cnt, count(DISTINCT store_sales.ss_list_price)@2 as b2_cntd] +46)------------------------------GlobalLimitExec: skip=0, fetch=100 +47)--------------------------------AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +48)----------------------------------CoalescePartitionsExec +49)------------------------------------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] +50)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_list_price], file_type=vortex, predicate: ss_quantity@10 >= 6 AND ss_quantity@10 <= 10 AND (ss_list_price@12 >= 90.00 AND ss_list_price@12 <= 100.00 OR ss_coupon_amt@19 >= 2323.00 AND ss_coupon_amt@19 <= 3323.00 OR ss_wholesale_cost@11 >= 31.00 AND ss_wholesale_cost@11 <= 51.00) diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no new file mode 100644 index 00000000000..99149ded3d4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no @@ -0,0 +1,108 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + i_item_desc, + s_store_id, + s_store_name, + sum(ss_quantity) AS store_sales_quantity, + sum(sr_return_quantity) AS store_returns_quantity, + sum(cs_quantity) AS catalog_sales_quantity +FROM store_sales, + store_returns, + catalog_sales, + date_dim d1, + date_dim d2, + date_dim d3, + store, + item +WHERE d1.d_moy = 9 + AND d1.d_year = 1999 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_moy BETWEEN 9 AND 9 + 3 + AND d2.d_year = 1999 + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_year IN (1999, + 1999+1, + 1999+2) +GROUP BY i_item_id, + i_item_desc, + s_store_id, + s_store_name +ORDER BY i_item_id, + i_item_desc, + s_store_id, + s_store_name +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST, fetch=100 +02)--Projection: item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, sum(store_sales.ss_quantity) AS store_sales_quantity, sum(store_returns.sr_return_quantity) AS store_returns_quantity, sum(catalog_sales.cs_quantity) AS catalog_sales_quantity +03)----Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name]], aggr=[[sum(store_sales.ss_quantity), sum(store_returns.sr_return_quantity), sum(catalog_sales.cs_quantity)]] +04)------Projection: store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_store_id, store.s_store_name, item.i_item_id, item.i_item_desc +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_store_id, store.s_store_name +07)------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +08)--------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity +09)----------------Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk +10)------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +11)--------------------Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +13)------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +14)--------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity +15)----------------------------Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk +16)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_return_quantity +17)--------------------------------Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +18)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] +19)----------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] +20)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] +21)--------------------------SubqueryAlias: d1 +22)----------------------------Projection: date_dim.d_date_sk +23)------------------------------Filter: date_dim.d_moy = Int64(9) AND date_dim.d_year = Int64(1999) +24)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(9), date_dim.d_year = Int64(1999)] +25)----------------------SubqueryAlias: d2 +26)------------------------Projection: date_dim.d_date_sk +27)--------------------------Filter: date_dim.d_moy >= Int64(9) AND date_dim.d_moy <= Int64(12) AND date_dim.d_year = Int64(1999) +28)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy >= Int64(9), date_dim.d_moy <= Int64(12), date_dim.d_year = Int64(1999)] +29)------------------SubqueryAlias: d3 +30)--------------------Projection: date_dim.d_date_sk +31)----------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001) +32)------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +33)--------------TableScan: store projection=[s_store_sk, s_store_id, s_store_name] +34)----------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name, sum(store_sales.ss_quantity)@4 as store_sales_quantity, sum(store_returns.sr_return_quantity)@5 as store_returns_quantity, sum(catalog_sales.cs_quantity)@6 as catalog_sales_quantity] +03)----SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name], aggr=[sum(store_sales.ss_quantity), sum(store_returns.sr_return_quantity), sum(catalog_sales.cs_quantity)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_store_id@2, s_store_name@3], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_id@5 as i_item_id, i_item_desc@6 as i_item_desc, s_store_id@3 as s_store_id, s_store_name@4 as s_store_name], aggr=[sum(store_sales.ss_quantity), sum(store_returns.sr_return_quantity), sum(catalog_sales.cs_quantity)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_quantity@4, sr_return_quantity@5, cs_quantity@6, s_store_id@7, s_store_name@8, i_item_id@1, i_item_desc@2] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc], file_type=vortex +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@3, ss_quantity@5, sr_return_quantity@6, cs_quantity@7, s_store_id@1, s_store_name@2] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id, s_store_name], file_type=vortex +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@4)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_return_quantity@4, cs_quantity@6] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001 +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@3)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_return_quantity@5, cs_sold_date_sk@6, cs_quantity@7] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 >= 9 AND d_moy@8 <= 12 AND d_year@6 = 1999 +15)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_quantity@4, sr_returned_date_sk@5, sr_return_quantity@6, cs_sold_date_sk@7, cs_quantity@8] +16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 9 AND d_year@6 = 1999 +17)----------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@1, sr_customer_sk@6), (cs_item_sk@2, sr_item_sk@5)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_store_sk@6, ss_quantity@7, sr_returned_date_sk@8, sr_return_quantity@11, cs_sold_date_sk@0, cs_quantity@3] +18)------------------------RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 4), input_partitions=4 +19)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity], file_type=vortex +20)------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 4), input_partitions=4 +21)--------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@2, ss_customer_sk@2), (sr_item_sk@1, ss_item_sk@1), (sr_ticket_number@3, ss_ticket_number@4)], projection=[ss_sold_date_sk@5, ss_item_sk@6, ss_store_sk@8, ss_quantity@10, sr_returned_date_sk@0, sr_item_sk@1, sr_customer_sk@2, sr_return_quantity@4] +22)----------------------------RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 4), input_partitions=4 +23)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity], file_type=vortex +24)----------------------------RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 4), input_partitions=4 +25)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q3.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q3.slt.no new file mode 100644 index 00000000000..edbf8ebab9d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q3.slt.no @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT dt.d_year, + item.i_brand_id brand_id, + item.i_brand brand, + sum(ss_ext_sales_price) sum_agg +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manufact_id = 128 + AND dt.d_moy=11 +GROUP BY dt.d_year, + item.i_brand, + item.i_brand_id +ORDER BY dt.d_year, + sum_agg DESC, + brand_id +LIMIT 100; +---- +logical_plan +01)Sort: dt.d_year ASC NULLS LAST, sum_agg DESC NULLS FIRST, brand_id ASC NULLS LAST, fetch=100 +02)--Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS sum_agg +03)----Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +04)------Projection: dt.d_year, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_ext_sales_price +07)------------Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk +08)--------------SubqueryAlias: dt +09)----------------Projection: date_dim.d_date_sk, date_dim.d_year +10)------------------Filter: date_dim.d_moy = Int64(11) +11)--------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11)] +12)--------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +13)----------Projection: item.i_item_sk, item.i_brand_id, item.i_brand +14)------------Filter: item.i_manufact_id = Int64(128) +15)--------------TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id], partial_filters=[item.i_manufact_id = Int64(128)] +physical_plan +01)SortPreservingMergeExec: [d_year@0 ASC NULLS LAST, sum_agg@3 DESC, brand_id@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@2 as brand_id, i_brand@1 as brand, sum(store_sales.ss_ext_sales_price)@3 as sum_agg] +03)----SortExec: TopK(fetch=100), expr=[d_year@0 ASC NULLS LAST, sum(store_sales.ss_ext_sales_price)@3 DESC, i_brand_id@2 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand@1 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] +05)--------RepartitionExec: partitioning=Hash([d_year@0, i_brand@1, i_brand_id@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand@3 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[d_year@3, ss_ext_sales_price@5, i_brand_id@1, i_brand@2] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_brand], file_type=vortex, predicate: i_manufact_id@13 = 128 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_ext_sales_price@4] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_moy@8 = 11 +11)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no new file mode 100644 index 00000000000..879881fc0ed --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no @@ -0,0 +1,131 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH customer_total_return AS + (SELECT wr_returning_customer_sk AS ctr_customer_sk, + ca_state AS ctr_state, + sum(wr_return_amt) AS ctr_total_return + FROM web_returns, + date_dim, + customer_address + WHERE wr_returned_date_sk = d_date_sk + AND d_year = 2002 + AND wr_returning_addr_sk = ca_address_sk + GROUP BY wr_returning_customer_sk, + ca_state) +SELECT c_customer_id, + c_salutation, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_day, + c_birth_month, + c_birth_year, + c_birth_country, + c_login, + c_email_address, + c_last_review_date_sk, + ctr_total_return +FROM customer_total_return ctr1, + customer_address, + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_state = ctr2.ctr_state) + AND ca_address_sk = c_current_addr_sk + AND ca_state = 'GA' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id NULLS FIRST, + c_salutation NULLS FIRST, + c_first_name NULLS FIRST, + c_last_name NULLS FIRST, + c_preferred_cust_flag NULLS FIRST, + c_birth_day NULLS FIRST, + c_birth_month NULLS FIRST, + c_birth_year NULLS FIRST, + c_birth_country NULLS FIRST, + c_login NULLS FIRST, + c_email_address NULLS FIRST, + c_last_review_date_sk NULLS FIRST, + ctr_total_return NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_customer_id ASC NULLS FIRST, customer.c_salutation ASC NULLS FIRST, customer.c_first_name ASC NULLS FIRST, customer.c_last_name ASC NULLS FIRST, customer.c_preferred_cust_flag ASC NULLS FIRST, customer.c_birth_day ASC NULLS FIRST, customer.c_birth_month ASC NULLS FIRST, customer.c_birth_year ASC NULLS FIRST, customer.c_birth_country ASC NULLS FIRST, customer.c_login ASC NULLS FIRST, customer.c_email_address ASC NULLS FIRST, customer.c_last_review_date_sk ASC NULLS FIRST, ctr1.ctr_total_return ASC NULLS FIRST, fetch=100 +02)--Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk, ctr1.ctr_total_return +03)----LeftSemi Join: ctr1.ctr_state = __scalar_sq_1.ctr_state Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) +04)------Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk +05)--------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +06)----------Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_current_addr_sk, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk +07)------------Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk +08)--------------SubqueryAlias: ctr1 +09)----------------SubqueryAlias: customer_total_return +10)------------------Projection: web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return +11)--------------------Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] +12)----------------------Projection: web_returns.wr_returning_customer_sk, web_returns.wr_return_amt, customer_address.ca_state +13)------------------------Inner Join: web_returns.wr_returning_addr_sk = customer_address.ca_address_sk +14)--------------------------Projection: web_returns.wr_returning_customer_sk, web_returns.wr_returning_addr_sk, web_returns.wr_return_amt +15)----------------------------Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: web_returns projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_year = Int64(2002) +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +20)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +21)--------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address, c_last_review_date_sk] +22)----------Projection: customer_address.ca_address_sk +23)------------Filter: customer_address.ca_state = Utf8View("GA") +24)--------------TableScan: customer_address projection=[ca_address_sk, ca_state], partial_filters=[customer_address.ca_state = Utf8View("GA")] +25)------SubqueryAlias: __scalar_sq_1 +26)--------Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_state +27)----------Aggregate: groupBy=[[ctr2.ctr_state]], aggr=[[avg(ctr2.ctr_total_return)]] +28)------------SubqueryAlias: ctr2 +29)--------------SubqueryAlias: customer_total_return +30)----------------Projection: customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return +31)------------------Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] +32)--------------------Projection: web_returns.wr_returning_customer_sk, web_returns.wr_return_amt, customer_address.ca_state +33)----------------------Inner Join: web_returns.wr_returning_addr_sk = customer_address.ca_address_sk +34)------------------------Projection: web_returns.wr_returning_customer_sk, web_returns.wr_returning_addr_sk, web_returns.wr_return_amt +35)--------------------------Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk +36)----------------------------TableScan: web_returns projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] +37)----------------------------Projection: date_dim.d_date_sk +38)------------------------------Filter: date_dim.d_year = Int64(2002) +39)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +40)------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +physical_plan +01)SortPreservingMergeExec: [c_customer_id@0 ASC, c_salutation@1 ASC, c_first_name@2 ASC, c_last_name@3 ASC, c_preferred_cust_flag@4 ASC, c_birth_day@5 ASC, c_birth_month@6 ASC, c_birth_year@7 ASC, c_birth_country@8 ASC, c_login@9 ASC, c_email_address@10 ASC, c_last_review_date_sk@11 ASC, ctr_total_return@12 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC, c_salutation@1 ASC, c_first_name@2 ASC, c_last_name@3 ASC, c_preferred_cust_flag@4 ASC, c_birth_day@5 ASC, c_birth_month@6 ASC, c_birth_year@7 ASC, c_birth_country@8 ASC, c_login@9 ASC, c_email_address@10 ASC, c_last_review_date_sk@11 ASC, ctr_total_return@12 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ctr_state@0, ctr_state@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[c_customer_id@2, c_salutation@3, c_first_name@4, c_last_name@5, c_preferred_cust_flag@6, c_birth_day@7, c_birth_month@8, c_birth_year@9, c_birth_country@10, c_login@11, c_email_address@12, c_last_review_date_sk@13, ctr_total_return@1] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@3)], projection=[ctr_state@1, ctr_total_return@2, c_customer_id@3, c_salutation@5, c_first_name@6, c_last_name@7, c_preferred_cust_flag@8, c_birth_day@9, c_birth_month@10, c_birth_year@11, c_birth_country@12, c_login@13, c_email_address@14, c_last_review_date_sk@15] +06)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_state@8 = GA +07)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_state@1, ctr_total_return@2, c_customer_id@4, c_current_addr_sk@5, c_salutation@6, c_first_name@7, c_last_name@8, c_preferred_cust_flag@9, c_birth_day@10, c_birth_month@11, c_birth_year@12, c_birth_country@13, c_login@14, c_email_address@15, c_last_review_date_sk@16] +08)------------CoalescePartitionsExec +09)--------------ProjectionExec: expr=[wr_returning_customer_sk@0 as ctr_customer_sk, ca_state@1 as ctr_state, sum(web_returns.wr_return_amt)@2 as ctr_total_return] +10)----------------AggregateExec: mode=FinalPartitioned, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(web_returns.wr_return_amt)] +11)------------------RepartitionExec: partitioning=Hash([wr_returning_customer_sk@0, ca_state@1], 4), input_partitions=4 +12)--------------------AggregateExec: mode=Partial, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(web_returns.wr_return_amt)] +13)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_returning_addr_sk@1, ca_address_sk@0)], projection=[wr_returning_customer_sk@0, wr_return_amt@2, ca_state@4] +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, wr_returned_date_sk@0)], projection=[wr_returning_customer_sk@2, wr_returning_addr_sk@3, wr_return_amt@4] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 +17)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt], file_type=vortex +18)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex +19)------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +20)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address, c_last_review_date_sk], file_type=vortex +21)------ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_state@0 as ctr_state] +22)--------AggregateExec: mode=FinalPartitioned, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] +23)----------RepartitionExec: partitioning=Hash([ctr_state@0], 4), input_partitions=4 +24)------------AggregateExec: mode=Partial, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] +25)--------------ProjectionExec: expr=[ca_state@1 as ctr_state, sum(web_returns.wr_return_amt)@2 as ctr_total_return] +26)----------------AggregateExec: mode=FinalPartitioned, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(web_returns.wr_return_amt)] +27)------------------RepartitionExec: partitioning=Hash([wr_returning_customer_sk@0, ca_state@1], 4), input_partitions=4 +28)--------------------AggregateExec: mode=Partial, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(web_returns.wr_return_amt)] +29)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +30)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_returning_addr_sk@1, ca_address_sk@0)], projection=[wr_returning_customer_sk@0, wr_return_amt@2, ca_state@4] +31)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, wr_returned_date_sk@0)], projection=[wr_returning_customer_sk@2, wr_returning_addr_sk@3, wr_return_amt@4] +32)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 +33)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt], file_type=vortex +34)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no new file mode 100644 index 00000000000..0052185be85 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no @@ -0,0 +1,234 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss AS + (SELECT ca_county, + d_qoy, + d_year, + sum(ss_ext_sales_price) AS store_sales + FROM store_sales, + date_dim, + customer_address + WHERE ss_sold_date_sk = d_date_sk + AND ss_addr_sk=ca_address_sk + GROUP BY ca_county, + d_qoy, + d_year), + ws AS + (SELECT ca_county, + d_qoy, + d_year, + sum(ws_ext_sales_price) AS web_sales + FROM web_sales, + date_dim, + customer_address + WHERE ws_sold_date_sk = d_date_sk + AND ws_bill_addr_sk=ca_address_sk + GROUP BY ca_county, + d_qoy, + d_year) +SELECT ss1.ca_county , + ss1.d_year , + (ws2.web_sales*1.0000)/ws1.web_sales web_q1_q2_increase , + (ss2.store_sales*1.0000)/ss1.store_sales store_q1_q2_increase , + (ws3.web_sales*1.0000)/ws2.web_sales web_q2_q3_increase , + (ss3.store_sales*1.0000)/ss2.store_sales store_q2_q3_increase +FROM ss ss1 , + ss ss2 , + ss ss3 , + ws ws1 , + ws ws2 , + ws ws3 +WHERE ss1.d_qoy = 1 + AND ss1.d_year = 2000 + AND ss1.ca_county = ss2.ca_county + AND ss2.d_qoy = 2 + AND ss2.d_year = 2000 + AND ss2.ca_county = ss3.ca_county + AND ss3.d_qoy = 3 + AND ss3.d_year = 2000 + AND ss1.ca_county = ws1.ca_county + AND ws1.d_qoy = 1 + AND ws1.d_year = 2000 + AND ws1.ca_county = ws2.ca_county + AND ws2.d_qoy = 2 + AND ws2.d_year = 2000 + AND ws1.ca_county = ws3.ca_county + AND ws3.d_qoy = 3 + AND ws3.d_year = 2000 + AND CASE + WHEN ws1.web_sales > 0 THEN (ws2.web_sales*1.0000)/ws1.web_sales + ELSE NULL + END > CASE + WHEN ss1.store_sales > 0 THEN (ss2.store_sales*1.0000)/ss1.store_sales + ELSE NULL + END + AND CASE + WHEN ws2.web_sales > 0 THEN (ws3.web_sales*1.0000)/ws2.web_sales + ELSE NULL + END > CASE + WHEN ss2.store_sales > 0 THEN (ss3.store_sales*1.0000)/ss2.store_sales + ELSE NULL + END +ORDER BY ss1.ca_county; +---- +logical_plan +01)Sort: ss1.ca_county ASC NULLS LAST +02)--Projection: ss1.ca_county, ss1.d_year, __common_expr_1 / CAST(ws1.web_sales AS Float64) AS web_q1_q2_increase, __common_expr_2 / CAST(ss1.store_sales AS Float64) AS store_q1_q2_increase, CAST(ws3.web_sales AS Float64) / __common_expr_1 AS web_q2_q3_increase, CAST(ss3.store_sales AS Float64) / __common_expr_2 AS store_q2_q3_increase +03)----Projection: CAST(ws2.web_sales AS Float64) AS __common_expr_1, CAST(ss2.store_sales AS Float64) AS __common_expr_2, ss1.ca_county, ss1.d_year, ss1.store_sales, ss3.store_sales, ws1.web_sales, ws3.web_sales +04)------Inner Join: ws1.ca_county = ws3.ca_county Filter: CASE WHEN ws2.web_sales > Decimal128(0.00,17,2) THEN CAST(ws3.web_sales AS Float64) / CAST(ws2.web_sales AS Float64) ELSE Float64(NULL) END > CASE WHEN ss2.store_sales > Decimal128(0.00,17,2) THEN CAST(ss3.store_sales AS Float64) / CAST(ss2.store_sales AS Float64) ELSE Float64(NULL) END +05)--------Projection: ss1.ca_county, ss1.d_year, ss1.store_sales, ss2.store_sales, ss3.store_sales, ws1.ca_county, ws1.web_sales, ws2.web_sales +06)----------Inner Join: ws1.ca_county = ws2.ca_county Filter: CASE WHEN ws1.web_sales > Decimal128(0.00,17,2) THEN CAST(ws2.web_sales AS Float64) / CAST(ws1.web_sales AS Float64) ELSE Float64(NULL) END > CASE WHEN ss1.store_sales > Decimal128(0.00,17,2) THEN CAST(ss2.store_sales AS Float64) / CAST(ss1.store_sales AS Float64) ELSE Float64(NULL) END +07)------------Inner Join: ss1.ca_county = ws1.ca_county +08)--------------Projection: ss1.ca_county, ss1.d_year, ss1.store_sales, ss2.store_sales, ss3.store_sales +09)----------------Inner Join: ss2.ca_county = ss3.ca_county +10)------------------Inner Join: ss1.ca_county = ss2.ca_county +11)--------------------SubqueryAlias: ss1 +12)----------------------SubqueryAlias: ss +13)------------------------Projection: customer_address.ca_county, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales +14)--------------------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +15)----------------------------Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +16)------------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +17)--------------------------------Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy +18)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +19)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] +20)------------------------------------Filter: date_dim.d_qoy = Int64(1) AND date_dim.d_year = Int64(2000) +21)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(1), date_dim.d_year = Int64(2000)] +22)--------------------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +23)--------------------SubqueryAlias: ss2 +24)----------------------SubqueryAlias: ss +25)------------------------Projection: customer_address.ca_county, sum(store_sales.ss_ext_sales_price) AS store_sales +26)--------------------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +27)----------------------------Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +28)------------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +29)--------------------------------Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy +30)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +31)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] +32)------------------------------------Filter: date_dim.d_qoy = Int64(2) AND date_dim.d_year = Int64(2000) +33)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2000)] +34)--------------------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +35)------------------SubqueryAlias: ss3 +36)--------------------SubqueryAlias: ss +37)----------------------Projection: customer_address.ca_county, sum(store_sales.ss_ext_sales_price) AS store_sales +38)------------------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +39)--------------------------Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +40)----------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +41)------------------------------Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy +42)--------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +43)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] +44)----------------------------------Filter: date_dim.d_qoy = Int64(3) AND date_dim.d_year = Int64(2000) +45)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(3), date_dim.d_year = Int64(2000)] +46)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +47)--------------SubqueryAlias: ws1 +48)----------------SubqueryAlias: ws +49)------------------Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales +50)--------------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +51)----------------------Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +52)------------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +53)--------------------------Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy +54)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +55)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] +56)------------------------------Filter: date_dim.d_qoy = Int64(1) AND date_dim.d_year = Int64(2000) +57)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(1), date_dim.d_year = Int64(2000)] +58)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +59)------------SubqueryAlias: ws2 +60)--------------SubqueryAlias: ws +61)----------------Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales +62)------------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +63)--------------------Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +64)----------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +65)------------------------Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy +66)--------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +67)----------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] +68)----------------------------Filter: date_dim.d_qoy = Int64(2) AND date_dim.d_year = Int64(2000) +69)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2000)] +70)------------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +71)--------SubqueryAlias: ws3 +72)----------SubqueryAlias: ws +73)------------Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales +74)--------------Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +75)----------------Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county +76)------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +77)--------------------Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy +78)----------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +79)------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] +80)------------------------Filter: date_dim.d_qoy = Int64(3) AND date_dim.d_year = Int64(2000) +81)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(3), date_dim.d_year = Int64(2000)] +82)--------------------TableScan: customer_address projection=[ca_address_sk, ca_county] +physical_plan +01)SortPreservingMergeExec: [ca_county@0 ASC NULLS LAST] +02)--SortExec: expr=[ca_county@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[ca_county@2 as ca_county, d_year@3 as d_year, __common_expr_1@0 / CAST(web_sales@6 AS Float64) as web_q1_q2_increase, __common_expr_2@1 / CAST(store_sales@4 AS Float64) as store_q1_q2_increase, CAST(web_sales@7 AS Float64) / __common_expr_1@0 as web_q2_q3_increase, CAST(store_sales@5 AS Float64) / __common_expr_2@1 as store_q2_q3_increase] +04)------ProjectionExec: expr=[CAST(web_sales@0 AS Float64) as __common_expr_1, CAST(store_sales@1 AS Float64) as __common_expr_2, ca_county@2 as ca_county, d_year@3 as d_year, store_sales@4 as store_sales, store_sales@5 as store_sales, web_sales@6 as web_sales, web_sales@7 as web_sales] +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_county@5, ca_county@0)], filter=CASE WHEN web_sales@2 > 0.00 THEN CAST(web_sales@3 AS Float64) / CAST(web_sales@2 AS Float64) END > CASE WHEN store_sales@0 > 0.00 THEN CAST(store_sales@1 AS Float64) / CAST(store_sales@0 AS Float64) END, projection=[web_sales@7, store_sales@3, ca_county@0, d_year@1, store_sales@2, store_sales@4, web_sales@6, web_sales@9] +06)----------CoalescePartitionsExec +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_county@5, ca_county@0)], filter=CASE WHEN web_sales@2 > 0.00 THEN CAST(web_sales@3 AS Float64) / CAST(web_sales@2 AS Float64) END > CASE WHEN store_sales@0 > 0.00 THEN CAST(store_sales@1 AS Float64) / CAST(store_sales@0 AS Float64) END, projection=[ca_county@0, d_year@1, store_sales@2, store_sales@3, store_sales@4, ca_county@5, web_sales@6, web_sales@8] +08)--------------CoalescePartitionsExec +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_county@0, ca_county@0)], projection=[ca_county@2, d_year@3, store_sales@4, store_sales@5, store_sales@6, ca_county@0, web_sales@1] +10)------------------CoalescePartitionsExec +11)--------------------ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] +12)----------------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +13)------------------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +14)--------------------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +15)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] +17)--------------------------------CoalescePartitionsExec +18)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_addr_sk@4, ws_ext_sales_price@5, d_year@1, d_qoy@2] +19)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 1 AND d_year@6 = 2000 +20)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +21)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex +22)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_county@3, ca_county@0)], projection=[ca_county@0, d_year@1, store_sales@2, store_sales@4, store_sales@6] +23)--------------------CoalescePartitionsExec +24)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_county@0, ca_county@0)] +25)------------------------CoalescePartitionsExec +26)--------------------------ProjectionExec: expr=[ca_county@0 as ca_county, d_year@2 as d_year, sum(store_sales.ss_ext_sales_price)@3 as store_sales] +27)----------------------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +28)------------------------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +29)--------------------------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +30)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@0)], projection=[ss_ext_sales_price@3, d_year@4, d_qoy@5, ca_county@1] +31)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex +32)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_addr_sk@4, ss_ext_sales_price@5, d_year@1, d_qoy@2] +33)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 1 AND d_year@6 = 2000 +34)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +35)------------------------ProjectionExec: expr=[ca_county@0 as ca_county, sum(store_sales.ss_ext_sales_price)@3 as store_sales] +36)--------------------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +37)----------------------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +38)------------------------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +39)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@0)], projection=[ss_ext_sales_price@3, d_year@4, d_qoy@5, ca_county@1] +40)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex +41)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_addr_sk@4, ss_ext_sales_price@5, d_year@1, d_qoy@2] +42)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 2 AND d_year@6 = 2000 +43)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +44)--------------------ProjectionExec: expr=[ca_county@0 as ca_county, sum(store_sales.ss_ext_sales_price)@3 as store_sales] +45)----------------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +46)------------------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +47)--------------------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +48)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@0)], projection=[ss_ext_sales_price@3, d_year@4, d_qoy@5, ca_county@1] +49)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex +50)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_addr_sk@4, ss_ext_sales_price@5, d_year@1, d_qoy@2] +51)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 3 AND d_year@6 = 2000 +52)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +53)--------------ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] +54)----------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +55)------------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +56)--------------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +57)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +58)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] +59)--------------------------CoalescePartitionsExec +60)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_addr_sk@4, ws_ext_sales_price@5, d_year@1, d_qoy@2] +61)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 2 AND d_year@6 = 2000 +62)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +63)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex +64)----------ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] +65)------------AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +66)--------------RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 4), input_partitions=4 +67)----------------AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)], ordering_mode=PartiallySorted([1, 2]) +68)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +69)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] +70)----------------------CoalescePartitionsExec +71)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_addr_sk@4, ws_ext_sales_price@5, d_year@1, d_qoy@2] +72)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, predicate: d_qoy@10 = 3 AND d_year@6 = 2000 +73)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +74)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no new file mode 100644 index 00000000000..e3aefd7def5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT sum(cs_ext_discount_amt) AS "excess discount amount" +FROM catalog_sales , + item , + date_dim +WHERE i_manufact_id = 977 + AND i_item_sk = cs_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = cs_sold_date_sk + AND cs_ext_discount_amt > + ( SELECT 1.3 * avg(cs_ext_discount_amt) + FROM catalog_sales , + date_dim + WHERE cs_item_sk = i_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = cs_sold_date_sk ) +LIMIT 100; +---- +logical_plan +01)Projection: sum(catalog_sales.cs_ext_discount_amt) AS excess discount amount +02)--Limit: skip=0, fetch=100 +03)----Aggregate: groupBy=[[]], aggr=[[sum(catalog_sales.cs_ext_discount_amt)]] +04)------Projection: catalog_sales.cs_ext_discount_amt +05)--------LeftSemi Join: item.i_item_sk = __scalar_sq_1.cs_item_sk Filter: CAST(catalog_sales.cs_ext_discount_amt AS Decimal128(30, 15)) > __scalar_sq_1.Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt) +06)----------Projection: catalog_sales.cs_ext_discount_amt, item.i_item_sk +07)------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +08)--------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, item.i_item_sk +09)----------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +10)------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] +11)------------------Projection: item.i_item_sk +12)--------------------Filter: item.i_manufact_id = Int64(977) +13)----------------------TableScan: item projection=[i_item_sk, i_manufact_id], partial_filters=[item.i_manufact_id = Int64(977)] +14)--------------Projection: date_dim.d_date_sk +15)----------------Filter: date_dim.d_date >= Date32("2000-01-27") AND date_dim.d_date <= Date32("2000-04-26") +16)------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-01-27"), date_dim.d_date <= Date32("2000-04-26")] +17)----------SubqueryAlias: __scalar_sq_1 +18)------------Projection: CAST(Float64(1.3) * CAST(avg(catalog_sales.cs_ext_discount_amt) AS Float64) AS Decimal128(30, 15)), catalog_sales.cs_item_sk +19)--------------Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[avg(catalog_sales.cs_ext_discount_amt)]] +20)----------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_discount_amt +21)------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +22)--------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] +23)--------------------Projection: date_dim.d_date_sk +24)----------------------Filter: date_dim.d_date >= Date32("2000-01-27") AND date_dim.d_date <= Date32("2000-04-26") +25)------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-01-27"), date_dim.d_date <= Date32("2000-04-26")] +physical_plan +01)ProjectionExec: expr=[sum(catalog_sales.cs_ext_discount_amt)@0 as excess discount amount] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[sum(catalog_sales.cs_ext_discount_amt)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[sum(catalog_sales.cs_ext_discount_amt)] +06)----------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_item_sk@1, cs_item_sk@1)], filter=CAST(cs_ext_discount_amt@0 AS Decimal128(30, 15)) > Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt)@1, projection=[cs_ext_discount_amt@0] +07)------------CoalescePartitionsExec +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ext_discount_amt@2, i_item_sk@3] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-01-27 AND d_date@2 <= 2000-04-26 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@1, cs_ext_discount_amt@3, i_item_sk@0] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_manufact_id@13 = 977 +12)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt], file_type=vortex +13)------------ProjectionExec: expr=[CAST(1.3 * CAST(avg(catalog_sales.cs_ext_discount_amt)@1 AS Float64) AS Decimal128(30, 15)) as Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt), cs_item_sk@0 as cs_item_sk] +14)--------------AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[avg(catalog_sales.cs_ext_discount_amt)] +15)----------------RepartitionExec: partitioning=Hash([cs_item_sk@0], 4), input_partitions=4 +16)------------------AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[avg(catalog_sales.cs_ext_discount_amt)] +17)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@2, cs_ext_discount_amt@3] +18)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-01-27 AND d_date@2 <= 2000-04-26 +19)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no new file mode 100644 index 00000000000..411a8c4d6be --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no @@ -0,0 +1,191 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss AS + ( SELECT i_manufact_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id), + cs AS + ( SELECT i_manufact_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id), + ws AS + ( SELECT i_manufact_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id) +SELECT i_manufact_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_manufact_id +ORDER BY total_sales +LIMIT 100; +---- +logical_plan +01)Sort: total_sales ASC NULLS LAST, fetch=100 +02)--Projection: tmp1.i_manufact_id, sum(tmp1.total_sales) AS total_sales +03)----Aggregate: groupBy=[[tmp1.i_manufact_id]], aggr=[[sum(tmp1.total_sales)]] +04)------SubqueryAlias: tmp1 +05)--------Union +06)----------SubqueryAlias: ss +07)------------Projection: item.i_manufact_id, sum(store_sales.ss_ext_sales_price) AS total_sales +08)--------------Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +09)----------------LeftSemi Join: item.i_manufact_id = __correlated_sq_1.i_manufact_id +10)------------------Projection: store_sales.ss_ext_sales_price, item.i_manufact_id +11)--------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +13)------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +14)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price +15)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(5) +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] +20)--------------------------Projection: customer_address.ca_address_sk +21)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +22)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +23)----------------------TableScan: item projection=[i_item_sk, i_manufact_id] +24)------------------SubqueryAlias: __correlated_sq_1 +25)--------------------Projection: item.i_manufact_id +26)----------------------Filter: item.i_category = Utf8View("Electronics") +27)------------------------TableScan: item projection=[i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Electronics")] +28)----------SubqueryAlias: cs +29)------------Projection: item.i_manufact_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales +30)--------------Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] +31)----------------LeftSemi Join: item.i_manufact_id = __correlated_sq_2.i_manufact_id +32)------------------Projection: catalog_sales.cs_ext_sales_price, item.i_manufact_id +33)--------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +34)----------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +35)------------------------Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk +36)--------------------------Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +37)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +38)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] +39)------------------------------Projection: date_dim.d_date_sk +40)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(5) +41)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] +42)--------------------------Projection: customer_address.ca_address_sk +43)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +44)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +45)----------------------TableScan: item projection=[i_item_sk, i_manufact_id] +46)------------------SubqueryAlias: __correlated_sq_2 +47)--------------------Projection: item.i_manufact_id +48)----------------------Filter: item.i_category = Utf8View("Electronics") +49)------------------------TableScan: item projection=[i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Electronics")] +50)----------SubqueryAlias: ws +51)------------Projection: item.i_manufact_id, sum(web_sales.ws_ext_sales_price) AS total_sales +52)--------------Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +53)----------------LeftSemi Join: item.i_manufact_id = __correlated_sq_3.i_manufact_id +54)------------------Projection: web_sales.ws_ext_sales_price, item.i_manufact_id +55)--------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +56)----------------------Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price +57)------------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +58)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price +59)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +60)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] +61)------------------------------Projection: date_dim.d_date_sk +62)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(5) +63)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] +64)--------------------------Projection: customer_address.ca_address_sk +65)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +66)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +67)----------------------TableScan: item projection=[i_item_sk, i_manufact_id] +68)------------------SubqueryAlias: __correlated_sq_3 +69)--------------------Projection: item.i_manufact_id +70)----------------------Filter: item.i_category = Utf8View("Electronics") +71)------------------------TableScan: item projection=[i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Electronics")] +physical_plan +01)SortPreservingMergeExec: [total_sales@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(tmp1.total_sales)@1 as total_sales] +03)----SortExec: TopK(fetch=100), expr=[sum(tmp1.total_sales)@1 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=SinglePartitioned, gby=[i_manufact_id@0 as i_manufact_id], aggr=[sum(tmp1.total_sales)] +05)--------InterleaveExec +06)----------ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_manufact_id@0 as i_manufact_id], aggr=[sum(store_sales.ss_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_manufact_id@0], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(store_sales.ss_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_manufact_id@0, i_manufact_id@1)] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_manufact_id], file_type=vortex, predicate: i_category@12 = Electronics +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@3, i_manufact_id@1] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_item_sk@1, ss_ext_sales_price@3] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_addr_sk@3, ss_ext_sales_price@4] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 5 +18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +19)----------ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] +20)------------AggregateExec: mode=FinalPartitioned, gby=[i_manufact_id@0 as i_manufact_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +21)--------------RepartitionExec: partitioning=Hash([i_manufact_id@0], 4), input_partitions=4 +22)----------------AggregateExec: mode=Partial, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +23)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_manufact_id@0, i_manufact_id@1)] +24)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_manufact_id], file_type=vortex, predicate: i_category@12 = Electronics +25)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@0)], projection=[cs_ext_sales_price@3, i_manufact_id@1] +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex +27)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, cs_bill_addr_sk@0)], projection=[cs_item_sk@2, cs_ext_sales_price@3] +28)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +29)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_addr_sk@2, cs_item_sk@3, cs_ext_sales_price@4] +30)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 5 +31)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex +32)----------ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] +33)------------AggregateExec: mode=FinalPartitioned, gby=[i_manufact_id@0 as i_manufact_id], aggr=[sum(web_sales.ws_ext_sales_price)] +34)--------------RepartitionExec: partitioning=Hash([i_manufact_id@0], 4), input_partitions=4 +35)----------------AggregateExec: mode=Partial, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(web_sales.ws_ext_sales_price)] +36)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_manufact_id@0, i_manufact_id@1)] +37)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_manufact_id], file_type=vortex, predicate: i_category@12 = Electronics +38)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +39)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_manufact_id@3] +40)------------------------CoalescePartitionsExec +41)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ws_bill_addr_sk@1)], projection=[ws_item_sk@1, ws_ext_sales_price@3] +42)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +43)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_bill_addr_sk@3, ws_ext_sales_price@4] +44)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 5 +45)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +46)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q34.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q34.slt.no new file mode 100644 index 00000000000..a5ccd4bdac5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q34.slt.no @@ -0,0 +1,88 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_last_name , + c_first_name , + c_salutation , + c_preferred_cust_flag , + ss_ticket_number , + cnt +FROM + (SELECT ss_ticket_number , + ss_customer_sk , + count(*) cnt + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND (date_dim.d_dom BETWEEN 1 AND 3 + OR date_dim.d_dom BETWEEN 25 AND 28) + AND (household_demographics.hd_buy_potential = '>10000' + OR household_demographics.hd_buy_potential = 'Unknown') + AND household_demographics.hd_vehicle_count > 0 + AND (CASE + WHEN household_demographics.hd_vehicle_count > 0 THEN (household_demographics.hd_dep_count*1.000)/ household_demographics.hd_vehicle_count + ELSE NULL + END) > 1.2 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_county = 'Williamson County' + GROUP BY ss_ticket_number, + ss_customer_sk) dn, + customer +WHERE ss_customer_sk = c_customer_sk + AND cnt BETWEEN 15 AND 20 +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + c_salutation NULLS FIRST, + c_preferred_cust_flag DESC NULLS FIRST, + ss_ticket_number NULLS FIRST; +---- +logical_plan +01)Sort: customer.c_last_name ASC NULLS FIRST, customer.c_first_name ASC NULLS FIRST, customer.c_salutation ASC NULLS FIRST, customer.c_preferred_cust_flag DESC NULLS FIRST, dn.ss_ticket_number ASC NULLS FIRST +02)--Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dn.ss_ticket_number, dn.cnt +03)----Inner Join: dn.ss_customer_sk = customer.c_customer_sk +04)------SubqueryAlias: dn +05)--------Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(Int64(1)) AS count(*) AS cnt +06)----------Filter: count(Int64(1)) >= Int64(15) AND count(Int64(1)) <= Int64(20) +07)------------Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(Int64(1))]] +08)--------------Projection: store_sales.ss_customer_sk, store_sales.ss_ticket_number +09)----------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +10)------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_ticket_number +11)--------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +12)----------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] +15)--------------------------Projection: date_dim.d_date_sk +16)----------------------------Filter: (date_dim.d_dom >= Int64(1) AND date_dim.d_dom <= Int64(3) OR date_dim.d_dom >= Int64(25) AND date_dim.d_dom <= Int64(28)) AND (date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)) +17)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_dom], partial_filters=[date_dim.d_dom >= Int64(1) AND date_dim.d_dom <= Int64(3) OR date_dim.d_dom >= Int64(25) AND date_dim.d_dom <= Int64(28), date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +18)----------------------Projection: store.s_store_sk +19)------------------------Filter: store.s_county = Utf8View("Williamson County") +20)--------------------------TableScan: store projection=[s_store_sk, s_county], partial_filters=[store.s_county = Utf8View("Williamson County")] +21)------------------Projection: household_demographics.hd_demo_sk +22)--------------------Filter: (household_demographics.hd_buy_potential = Utf8View(">10000") OR household_demographics.hd_buy_potential = Utf8View("Unknown")) AND household_demographics.hd_vehicle_count > Int32(0) AND CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN CAST(household_demographics.hd_dep_count AS Float64) / CAST(household_demographics.hd_vehicle_count AS Float64) ELSE Float64(NULL) END > Float64(1.2) +23)----------------------TableScan: household_demographics projection=[hd_demo_sk, hd_buy_potential, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_buy_potential = Utf8View(">10000") OR household_demographics.hd_buy_potential = Utf8View("Unknown"), household_demographics.hd_vehicle_count > Int32(0), CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN CAST(household_demographics.hd_dep_count AS Float64) / CAST(household_demographics.hd_vehicle_count AS Float64) ELSE Float64(NULL) END > Float64(1.2)] +24)------TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] +physical_plan +01)SortPreservingMergeExec: [c_last_name@0 ASC, c_first_name@1 ASC, c_salutation@2 ASC, c_preferred_cust_flag@3 DESC, ss_ticket_number@4 ASC] +02)--SortExec: expr=[c_last_name@0 ASC, c_first_name@1 ASC, c_salutation@2 ASC, c_preferred_cust_flag@3 DESC, ss_ticket_number@4 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_last_name@3, c_first_name@2, c_salutation@1, c_preferred_cust_flag@4, ss_ticket_number@5, cnt@7] +04)------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag], file_type=vortex +05)------ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, count(Int64(1))@2 as cnt] +06)--------FilterExec: count(Int64(1))@2 >= 15 AND count(Int64(1))@2 <= 20 +07)----------AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk], aggr=[count(Int64(1))] +08)------------RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1], 4), input_partitions=4 +09)--------------AggregateExec: mode=Partial, gby=[ss_ticket_number@1 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk], aggr=[count(Int64(1))] +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_customer_sk@1, ss_ticket_number@3] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: (hd_buy_potential@2 = >10000 OR hd_buy_potential@2 = Unknown) AND hd_vehicle_count@4 > 0 AND CASE WHEN hd_vehicle_count@4 > 0 THEN CAST(hd_dep_count@3 AS Float64) / CAST(hd_vehicle_count@4 AS Float64) END > 1.2 +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_ticket_number@4] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_county@23 = Williamson County +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_store_sk@4, ss_ticket_number@5] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: (d_dom@9 >= 1 AND d_dom@9 <= 3 OR d_dom@9 >= 25 AND d_dom@9 <= 28) AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001) +16)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no new file mode 100644 index 00000000000..aa6fa04b01e --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no @@ -0,0 +1,137 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + count(*) cnt1, + min(cd_dep_count) min1, + max(cd_dep_count) max1, + avg(cd_dep_count) avg1, + cd_dep_employed_count, + count(*) cnt2, + min(cd_dep_employed_count) min2, + max(cd_dep_employed_count) max2, + avg(cd_dep_employed_count) avg2, + cd_dep_college_count, + count(*) cnt3, + min(cd_dep_college_count), + max(cd_dep_college_count), + avg(cd_dep_college_count) +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4) + AND (EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4) + OR EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4)) +GROUP BY ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +ORDER BY ca_state NULLS FIRST, + cd_gender NULLS FIRST, + cd_marital_status NULLS FIRST, + cd_dep_count NULLS FIRST, + cd_dep_employed_count NULLS FIRST, + cd_dep_college_count NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: ca.ca_state ASC NULLS FIRST, customer_demographics.cd_gender ASC NULLS FIRST, customer_demographics.cd_marital_status ASC NULLS FIRST, customer_demographics.cd_dep_count ASC NULLS FIRST, customer_demographics.cd_dep_employed_count ASC NULLS FIRST, customer_demographics.cd_dep_college_count ASC NULLS FIRST, fetch=100 +02)--Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, count(Int64(1)) AS count(*) AS cnt1, min(customer_demographics.cd_dep_count) AS min1, max(customer_demographics.cd_dep_count) AS max1, avg(customer_demographics.cd_dep_count) AS avg1, customer_demographics.cd_dep_employed_count, count(Int64(1)) AS count(*) AS cnt2, min(customer_demographics.cd_dep_employed_count) AS min2, max(customer_demographics.cd_dep_employed_count) AS max2, avg(customer_demographics.cd_dep_employed_count) AS avg2, customer_demographics.cd_dep_college_count, count(Int64(1)) AS count(*) AS cnt3, min(customer_demographics.cd_dep_college_count), max(customer_demographics.cd_dep_college_count), avg(customer_demographics.cd_dep_college_count) +03)----Aggregate: groupBy=[[ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count]], aggr=[[count(Int64(1)), min(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_count), avg(CAST(customer_demographics.cd_dep_count AS Float64)), min(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_employed_count), avg(CAST(customer_demographics.cd_dep_employed_count AS Float64)), min(customer_demographics.cd_dep_college_count), max(customer_demographics.cd_dep_college_count), avg(CAST(customer_demographics.cd_dep_college_count AS Float64))]] +04)------Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count +05)--------Filter: __correlated_sq_2.mark OR __correlated_sq_3.mark +06)----------Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count, __correlated_sq_2.mark, __correlated_sq_3.mark +07)------------LeftMark Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk +08)--------------LeftMark Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk +09)----------------LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk +10)------------------Projection: c.c_customer_sk, ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count +11)--------------------Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk +12)----------------------Projection: c.c_customer_sk, c.c_current_cdemo_sk, ca.ca_state +13)------------------------Inner Join: c.c_current_addr_sk = ca.ca_address_sk +14)--------------------------SubqueryAlias: c +15)----------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] +16)--------------------------SubqueryAlias: ca +17)----------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +18)----------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] +19)------------------SubqueryAlias: __correlated_sq_1 +20)--------------------Projection: store_sales.ss_customer_sk +21)----------------------LeftSemi Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +22)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] +23)------------------------Projection: date_dim.d_date_sk +24)--------------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_qoy < Int64(4) +25)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_qoy < Int64(4)] +26)----------------SubqueryAlias: __correlated_sq_2 +27)------------------Projection: web_sales.ws_bill_customer_sk +28)--------------------LeftSemi Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +29)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] +30)----------------------Projection: date_dim.d_date_sk +31)------------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_qoy < Int64(4) +32)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_qoy < Int64(4)] +33)--------------SubqueryAlias: __correlated_sq_3 +34)----------------Projection: catalog_sales.cs_ship_customer_sk +35)------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +36)--------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] +37)--------------------Projection: date_dim.d_date_sk +38)----------------------Filter: date_dim.d_year = Int64(2002) AND date_dim.d_qoy < Int64(4) +39)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_year = Int64(2002), date_dim.d_qoy < Int64(4)] +physical_plan +01)SortPreservingMergeExec: [ca_state@0 ASC, cd_gender@1 ASC, cd_marital_status@2 ASC, cd_dep_count@3 ASC, cd_dep_employed_count@8 ASC, cd_dep_college_count@13 ASC], fetch=100 +02)--ProjectionExec: expr=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, count(Int64(1))@6 as cnt1, min(customer_demographics.cd_dep_count)@7 as min1, max(customer_demographics.cd_dep_count)@8 as max1, avg(customer_demographics.cd_dep_count)@9 as avg1, cd_dep_employed_count@4 as cd_dep_employed_count, count(Int64(1))@6 as cnt2, min(customer_demographics.cd_dep_employed_count)@10 as min2, max(customer_demographics.cd_dep_employed_count)@11 as max2, avg(customer_demographics.cd_dep_employed_count)@12 as avg2, cd_dep_college_count@5 as cd_dep_college_count, count(Int64(1))@6 as cnt3, min(customer_demographics.cd_dep_college_count)@13 as min(customer_demographics.cd_dep_college_count), max(customer_demographics.cd_dep_college_count)@14 as max(customer_demographics.cd_dep_college_count), avg(customer_demographics.cd_dep_college_count)@15 as avg(customer_demographics.cd_dep_college_count)] +03)----SortExec: TopK(fetch=100), expr=[ca_state@0 ASC, cd_gender@1 ASC, cd_marital_status@2 ASC, cd_dep_count@3 ASC, cd_dep_employed_count@4 ASC, cd_dep_college_count@5 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, cd_dep_employed_count@4 as cd_dep_employed_count, cd_dep_college_count@5 as cd_dep_college_count], aggr=[count(Int64(1)), min(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_count), avg(customer_demographics.cd_dep_count), min(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_employed_count), avg(customer_demographics.cd_dep_employed_count), min(customer_demographics.cd_dep_college_count), max(customer_demographics.cd_dep_college_count), avg(customer_demographics.cd_dep_college_count)] +05)--------RepartitionExec: partitioning=Hash([ca_state@0, cd_gender@1, cd_marital_status@2, cd_dep_count@3, cd_dep_employed_count@4, cd_dep_college_count@5], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, cd_dep_employed_count@4 as cd_dep_employed_count, cd_dep_college_count@5 as cd_dep_college_count], aggr=[count(Int64(1)), min(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_count), avg(customer_demographics.cd_dep_count), min(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_employed_count), avg(customer_demographics.cd_dep_employed_count), min(customer_demographics.cd_dep_college_count), max(customer_demographics.cd_dep_college_count), avg(customer_demographics.cd_dep_college_count)] +07)------------FilterExec: mark@6 OR mark@7, projection=[ca_state@0, cd_gender@1, cd_marital_status@2, cd_dep_count@3, cd_dep_employed_count@4, cd_dep_college_count@5] +08)--------------HashJoinExec: mode=CollectLeft, join_type=LeftMark, on=[(c_customer_sk@0, cs_ship_customer_sk@0)], projection=[ca_state@1, cd_gender@2, cd_marital_status@3, cd_dep_count@4, cd_dep_employed_count@5, cd_dep_college_count@6, mark@7, mark@8] +09)----------------CoalescePartitionsExec +10)------------------HashJoinExec: mode=CollectLeft, join_type=LeftMark, on=[(c_customer_sk@0, ws_bill_customer_sk@0)] +11)--------------------CoalescePartitionsExec +12)----------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] +13)------------------------CoalescePartitionsExec +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, ca_state@2, cd_gender@4, cd_marital_status@5, cd_dep_count@6, cd_dep_employed_count@7, cd_dep_college_count@8] +15)----------------------------CoalescePartitionsExec +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], projection=[c_customer_sk@2, c_current_cdemo_sk@3, ca_state@1] +17)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex +18)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +19)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk], file_type=vortex +20)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +21)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count], file_type=vortex +22)------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@1] +23)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_qoy@10 < 4 +24)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk], file_type=vortex +25)--------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_customer_sk@1] +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_qoy@10 < 4 +27)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk], file_type=vortex +28)----------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ship_customer_sk@1] +29)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2002 AND d_qoy@10 < 4 +30)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_ship_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no new file mode 100644 index 00000000000..7b397768e64 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no @@ -0,0 +1,184 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH results AS + (SELECT sum(ss_net_profit) AS ss_net_profit, + sum(ss_ext_sales_price) AS ss_ext_sales_price, + (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin , + i_category , + i_class , + 0 AS g_category, + 0 AS g_class + FROM store_sales , + date_dim d1 , + item , + store + WHERE d1.d_year = 2001 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND s_state ='TN' + GROUP BY i_category, + i_class) , + results_rollup AS + (SELECT gross_margin, + i_category, + i_class, + 0 AS t_category, + 0 AS t_class, + 0 AS lochierarchy + FROM results + UNION SELECT (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin, + i_category, + NULL AS i_class, + 0 AS t_category, + 1 AS t_class, + 1 AS lochierarchy + FROM results + GROUP BY i_category + UNION SELECT (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin, + NULL AS i_category, + NULL AS i_class, + 1 AS t_category, + 1 AS t_class, + 2 AS lochierarchy + FROM results) +SELECT gross_margin, + i_category, + i_class, + lochierarchy, + rank() OVER ( PARTITION BY lochierarchy, + CASE + WHEN t_class = 0 THEN i_category + END + ORDER BY gross_margin ASC) AS rank_within_parent +FROM results_rollup +ORDER BY lochierarchy DESC NULLS FIRST, + CASE + WHEN lochierarchy = 0 THEN i_category + END NULLS FIRST, + rank_within_parent NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: results_rollup.lochierarchy DESC NULLS FIRST, CASE WHEN results_rollup.lochierarchy = Int64(0) THEN results_rollup.i_category END ASC NULLS FIRST, rank_within_parent ASC NULLS FIRST, fetch=100 +02)--Projection: results_rollup.gross_margin, results_rollup.i_category, results_rollup.i_class, results_rollup.lochierarchy, rank() PARTITION BY [results_rollup.lochierarchy, CASE WHEN results_rollup.t_class = Int64(0) THEN results_rollup.i_category END] ORDER BY [results_rollup.gross_margin ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent +03)----WindowAggr: windowExpr=[[rank() PARTITION BY [results_rollup.lochierarchy, CASE WHEN results_rollup.t_class = Int64(0) THEN results_rollup.i_category END] ORDER BY [results_rollup.gross_margin ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +04)------SubqueryAlias: results_rollup +05)--------Projection: gross_margin, i_category, i_class, t_class, lochierarchy +06)----------Aggregate: groupBy=[[gross_margin, i_category, i_class, t_category, t_class, lochierarchy]], aggr=[[]] +07)------------Union +08)--------------Projection: results.gross_margin, results.i_category, results.i_class, Int64(0) AS t_category, Int64(0) AS t_class, Int64(0) AS lochierarchy +09)----------------SubqueryAlias: results +10)------------------Projection: CAST(sum(store_sales.ss_net_profit) AS Float64) / CAST(sum(store_sales.ss_ext_sales_price) AS Float64) AS gross_margin, item.i_category, item.i_class +11)--------------------Aggregate: groupBy=[[item.i_category, item.i_class]], aggr=[[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)]] +12)----------------------Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +13)------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +14)--------------------------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +15)----------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +16)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit +17)--------------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +18)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] +19)----------------------------------SubqueryAlias: d1 +20)------------------------------------Projection: date_dim.d_date_sk +21)--------------------------------------Filter: date_dim.d_year = Int64(2001) +22)----------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +23)------------------------------TableScan: item projection=[i_item_sk, i_class, i_category] +24)--------------------------Projection: store.s_store_sk +25)----------------------------Filter: store.s_state = Utf8View("TN") +26)------------------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +27)--------------Projection: CAST(sum(results.ss_net_profit) AS Float64) / CAST(sum(results.ss_ext_sales_price) AS Float64) AS gross_margin, results.i_category, Utf8View(NULL) AS i_class, Int64(0) AS t_category, Int64(1) AS t_class, Int64(1) AS lochierarchy +28)----------------Aggregate: groupBy=[[results.i_category]], aggr=[[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)]] +29)------------------SubqueryAlias: results +30)--------------------Projection: sum(store_sales.ss_net_profit) AS ss_net_profit, sum(store_sales.ss_ext_sales_price) AS ss_ext_sales_price, item.i_category +31)----------------------Aggregate: groupBy=[[item.i_category, item.i_class]], aggr=[[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)]] +32)------------------------Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +33)--------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +34)----------------------------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +35)------------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +36)--------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit +37)----------------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +38)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] +39)------------------------------------SubqueryAlias: d1 +40)--------------------------------------Projection: date_dim.d_date_sk +41)----------------------------------------Filter: date_dim.d_year = Int64(2001) +42)------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +43)--------------------------------TableScan: item projection=[i_item_sk, i_class, i_category] +44)----------------------------Projection: store.s_store_sk +45)------------------------------Filter: store.s_state = Utf8View("TN") +46)--------------------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +47)--------------Projection: CAST(sum(results.ss_net_profit) AS Float64) / CAST(sum(results.ss_ext_sales_price) AS Float64) AS gross_margin, Utf8View(NULL) AS i_category, Utf8View(NULL) AS i_class, Int64(1) AS t_category, Int64(1) AS t_class, Int64(2) AS lochierarchy +48)----------------Aggregate: groupBy=[[]], aggr=[[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)]] +49)------------------SubqueryAlias: results +50)--------------------Projection: sum(store_sales.ss_net_profit) AS ss_net_profit, sum(store_sales.ss_ext_sales_price) AS ss_ext_sales_price +51)----------------------Aggregate: groupBy=[[item.i_category, item.i_class]], aggr=[[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)]] +52)------------------------Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +53)--------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +54)----------------------------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category +55)------------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +56)--------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit +57)----------------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +58)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] +59)------------------------------------SubqueryAlias: d1 +60)--------------------------------------Projection: date_dim.d_date_sk +61)----------------------------------------Filter: date_dim.d_year = Int64(2001) +62)------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +63)--------------------------------TableScan: item projection=[i_item_sk, i_class, i_category] +64)----------------------------Projection: store.s_store_sk +65)------------------------------Filter: store.s_state = Utf8View("TN") +66)--------------------------------TableScan: store projection=[s_store_sk, s_state], partial_filters=[store.s_state = Utf8View("TN")] +physical_plan +01)SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC, rank_within_parent@4 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC, rank_within_parent@4 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[gross_margin@0 as gross_margin, i_category@1 as i_category, i_class@2 as i_class, lochierarchy@4 as lochierarchy, rank() PARTITION BY [results_rollup.lochierarchy, CASE WHEN results_rollup.t_class = Int64(0) THEN results_rollup.i_category END] ORDER BY [results_rollup.gross_margin ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as rank_within_parent] +04)------BoundedWindowAggExec: wdw=[rank() PARTITION BY [results_rollup.lochierarchy, CASE WHEN results_rollup.t_class = Int64(0) THEN results_rollup.i_category END] ORDER BY [results_rollup.gross_margin ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [results_rollup.lochierarchy, CASE WHEN results_rollup.t_class = Int64(0) THEN results_rollup.i_category END] ORDER BY [results_rollup.gross_margin ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +05)--------SortExec: expr=[lochierarchy@4 ASC NULLS LAST, CASE WHEN t_class@3 = 0 THEN i_category@1 END ASC NULLS LAST, gross_margin@0 ASC NULLS LAST], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([lochierarchy@4, CASE WHEN t_class@3 = 0 THEN i_category@1 END], 4), input_partitions=4 +07)------------ProjectionExec: expr=[gross_margin@0 as gross_margin, i_category@1 as i_category, i_class@2 as i_class, t_class@4 as t_class, lochierarchy@5 as lochierarchy] +08)--------------AggregateExec: mode=FinalPartitioned, gby=[gross_margin@0 as gross_margin, i_category@1 as i_category, i_class@2 as i_class, t_category@3 as t_category, t_class@4 as t_class, lochierarchy@5 as lochierarchy], aggr=[] +09)----------------RepartitionExec: partitioning=Hash([gross_margin@0, i_category@1, i_class@2, t_category@3, t_class@4, lochierarchy@5], 4), input_partitions=9 +10)------------------AggregateExec: mode=Partial, gby=[gross_margin@0 as gross_margin, i_category@1 as i_category, i_class@2 as i_class, t_category@3 as t_category, t_class@4 as t_class, lochierarchy@5 as lochierarchy], aggr=[], ordering_mode=PartiallySorted([3, 4, 5]) +11)--------------------UnionExec +12)----------------------ProjectionExec: expr=[CAST(sum(store_sales.ss_net_profit)@2 AS Float64) / CAST(sum(store_sales.ss_ext_sales_price)@3 AS Float64) as gross_margin, i_category@0 as i_category, i_class@1 as i_class, 0 as t_category, 0 as t_class, 0 as lochierarchy] +13)------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +14)--------------------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1], 4), input_partitions=4 +15)----------------------------AggregateExec: mode=Partial, gby=[i_category@3 as i_category, i_class@2 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_ext_sales_price@2, ss_net_profit@3, i_class@4, i_category@5] +17)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +18)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_store_sk@4, ss_ext_sales_price@5, ss_net_profit@6, i_class@1, i_category@2] +19)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_class, i_category], file_type=vortex +20)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_ext_sales_price@4, ss_net_profit@5] +21)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 +22)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit], file_type=vortex +23)----------------------ProjectionExec: expr=[CAST(sum(results.ss_net_profit)@1 AS Float64) / CAST(sum(results.ss_ext_sales_price)@2 AS Float64) as gross_margin, i_category@0 as i_category, NULL as i_class, 0 as t_category, 1 as t_class, 1 as lochierarchy] +24)------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category], aggr=[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)] +25)--------------------------RepartitionExec: partitioning=Hash([i_category@0], 4), input_partitions=4 +26)----------------------------AggregateExec: mode=Partial, gby=[i_category@2 as i_category], aggr=[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)] +27)------------------------------ProjectionExec: expr=[sum(store_sales.ss_net_profit)@2 as ss_net_profit, sum(store_sales.ss_ext_sales_price)@3 as ss_ext_sales_price, i_category@0 as i_category] +28)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +29)----------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1], 4), input_partitions=4 +30)------------------------------------AggregateExec: mode=Partial, gby=[i_category@3 as i_category, i_class@2 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +31)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_ext_sales_price@2, ss_net_profit@3, i_class@4, i_category@5] +32)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +33)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_store_sk@4, ss_ext_sales_price@5, ss_net_profit@6, i_class@1, i_category@2] +34)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_class, i_category], file_type=vortex +35)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_ext_sales_price@4, ss_net_profit@5] +36)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 +37)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit], file_type=vortex +38)----------------------ProjectionExec: expr=[CAST(sum(results.ss_net_profit)@0 AS Float64) / CAST(sum(results.ss_ext_sales_price)@1 AS Float64) as gross_margin, NULL as i_category, NULL as i_class, 1 as t_category, 1 as t_class, 2 as lochierarchy] +39)------------------------AggregateExec: mode=Final, gby=[], aggr=[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)] +40)--------------------------CoalescePartitionsExec +41)----------------------------AggregateExec: mode=Partial, gby=[], aggr=[sum(results.ss_net_profit), sum(results.ss_ext_sales_price)] +42)------------------------------ProjectionExec: expr=[sum(store_sales.ss_net_profit)@2 as ss_net_profit, sum(store_sales.ss_ext_sales_price)@3 as ss_ext_sales_price] +43)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +44)----------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1], 4), input_partitions=4 +45)------------------------------------AggregateExec: mode=Partial, gby=[i_category@3 as i_category, i_class@2 as i_class], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] +46)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_ext_sales_price@2, ss_net_profit@3, i_class@4, i_category@5] +47)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_state@24 = TN +48)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_store_sk@4, ss_ext_sales_price@5, ss_net_profit@6, i_class@1, i_category@2] +49)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_class, i_category], file_type=vortex +50)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_ext_sales_price@4, ss_net_profit@5] +51)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 +52)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no new file mode 100644 index 00000000000..f8fc0d01f73 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + i_item_desc, + i_current_price +FROM item, + inventory, + date_dim, + catalog_sales +WHERE i_current_price BETWEEN 68 AND 68 + 30 + AND inv_item_sk = i_item_sk + AND d_date_sk=inv_date_sk + AND d_date BETWEEN cast('2000-02-01' AS date) AND cast('2000-04-01' AS date) + AND i_manufact_id IN (677, + 940, + 694, + 808) + AND inv_quantity_on_hand BETWEEN 100 AND 500 + AND cs_item_sk = i_item_sk +GROUP BY i_item_id, + i_item_desc, + i_current_price +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] +03)----Projection: item.i_item_id, item.i_item_desc, item.i_current_price +04)------LeftSemi Join: item.i_item_sk = catalog_sales.cs_item_sk +05)--------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price +06)----------LeftSemi Join: inventory.inv_date_sk = date_dim.d_date_sk +07)------------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price, inventory.inv_date_sk +08)--------------Inner Join: item.i_item_sk = inventory.inv_item_sk +09)----------------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price +10)------------------Filter: item.i_current_price >= Decimal128(68.00,7,2) AND item.i_current_price <= Decimal128(98.00,7,2) AND item.i_manufact_id IN ([Int64(677), Int64(940), Int64(694), Int64(808)]) +11)--------------------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_manufact_id], partial_filters=[item.i_current_price >= Decimal128(68.00,7,2), item.i_current_price <= Decimal128(98.00,7,2), item.i_manufact_id IN ([Int64(677), Int64(940), Int64(694), Int64(808)])] +12)----------------Projection: inventory.inv_date_sk, inventory.inv_item_sk +13)------------------Filter: inventory.inv_quantity_on_hand >= Int32(100) AND inventory.inv_quantity_on_hand <= Int32(500) +14)--------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand], partial_filters=[inventory.inv_quantity_on_hand >= Int32(100), inventory.inv_quantity_on_hand <= Int32(500)] +15)------------Projection: date_dim.d_date_sk +16)--------------Filter: date_dim.d_date >= Date32("2000-02-01") AND date_dim.d_date <= Date32("2000-04-01") +17)----------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-02-01"), date_dim.d_date <= Date32("2000-04-01")] +18)--------TableScan: catalog_sales projection=[cs_item_sk] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] +04)------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_current_price@2], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] +06)----------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_item_sk@0, cs_item_sk@0)], projection=[i_item_id@1, i_item_desc@2, i_current_price@3] +07)------------CoalescePartitionsExec +08)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, inv_date_sk@4)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-02-01 AND d_date@2 <= 2000-04-01 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3, inv_date_sk@4] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], file_type=vortex, predicate: i_current_price@5 >= 68.00 AND i_current_price@5 <= 98.00 AND i_manufact_id@13 IN (SET) ([677, 940, 694, 808]) +12)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk], file_type=vortex, predicate: inv_quantity_on_hand@3 >= 100 AND inv_quantity_on_hand@3 <= 500 +14)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_item_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no new file mode 100644 index 00000000000..67467cf5ecd --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no @@ -0,0 +1,108 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT count(*) +FROM + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM store_sales, + date_dim, + customer + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 INTERSECT + SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM catalog_sales, + date_dim, + customer WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 INTERSECT + SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM web_sales, + date_dim, + customer WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk + AND web_sales.ws_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 ) hot_cust +LIMIT 100; +---- +logical_plan +01)Projection: count(Int64(1)) AS count(*) +02)--Limit: skip=0, fetch=100 +03)----Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +04)------SubqueryAlias: hot_cust +05)--------Projection: +06)----------LeftSemi Join: left.c_last_name = customer.c_last_name, left.c_first_name = customer.c_first_name, left.d_date = date_dim.d_date +07)------------LeftSemi Join: left.c_last_name = right.c_last_name, left.c_first_name = right.c_first_name, left.d_date = right.d_date +08)--------------SubqueryAlias: left +09)----------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +10)------------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +11)--------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +12)----------------------Projection: store_sales.ss_customer_sk, date_dim.d_date +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] +15)--------------------------Projection: date_dim.d_date_sk, date_dim.d_date +16)----------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +17)------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +18)----------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +19)--------------SubqueryAlias: right +20)----------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +21)------------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +22)--------------------Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk +23)----------------------Projection: catalog_sales.cs_bill_customer_sk, date_dim.d_date +24)------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +25)--------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk] +26)--------------------------Projection: date_dim.d_date_sk, date_dim.d_date +27)----------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +28)------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +29)----------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +30)------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +31)--------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +32)----------------Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk +33)------------------Projection: web_sales.ws_bill_customer_sk, date_dim.d_date +34)--------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +35)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] +36)----------------------Projection: date_dim.d_date_sk, date_dim.d_date +37)------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +38)--------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +39)------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +physical_plan +01)ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +06)----------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)], projection=[], NullsEqual: true +07)------------CoalescePartitionsExec +08)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)], NullsEqual: true +09)----------------CoalescePartitionsExec +10)------------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +11)--------------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_customer_sk@3, d_date@1] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk], file_type=vortex +18)----------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +19)------------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +20)--------------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +21)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +22)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +23)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@3, d_date@1] +24)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +25)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk], file_type=vortex +26)------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +27)--------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +28)----------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +29)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +30)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +31)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_customer_sk@3, d_date@1] +32)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +33)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no new file mode 100644 index 00000000000..7e01dffa4e6 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no @@ -0,0 +1,144 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH inv AS + (SELECT w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy, + stdev, + mean, + CASE mean + WHEN 0 THEN NULL + ELSE stdev/mean + END cov + FROM + (SELECT w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy, + stddev_samp(inv_quantity_on_hand)*1.000 stdev, + avg(inv_quantity_on_hand) mean + FROM inventory, + item, + warehouse, + date_dim + WHERE inv_item_sk = i_item_sk + AND inv_warehouse_sk = w_warehouse_sk + AND inv_date_sk = d_date_sk + AND d_year =2001 + GROUP BY w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy) foo + WHERE CASE mean + WHEN 0 THEN 0 + ELSE stdev/mean + END > 1) +SELECT inv1.w_warehouse_sk wsk1, + inv1.i_item_sk isk1, + inv1.d_moy dmoy1, + inv1.mean mean1, + inv1.cov cov1, + inv2.w_warehouse_sk, + inv2.i_item_sk, + inv2.d_moy, + inv2.mean, + inv2.cov +FROM inv inv1, + inv inv2 +WHERE inv1.i_item_sk = inv2.i_item_sk + AND inv1.w_warehouse_sk = inv2.w_warehouse_sk + AND inv1.d_moy=1 + AND inv2.d_moy=1+1 +ORDER BY inv1.w_warehouse_sk NULLS FIRST, + inv1.i_item_sk NULLS FIRST, + inv1.d_moy NULLS FIRST, + inv1.mean NULLS FIRST, + inv1.cov NULLS FIRST, + inv2.d_moy NULLS FIRST, + inv2.mean NULLS FIRST, + inv2.cov NULLS FIRST; +---- +logical_plan +01)Sort: wsk1 ASC NULLS FIRST, isk1 ASC NULLS FIRST, dmoy1 ASC NULLS FIRST, mean1 ASC NULLS FIRST, cov1 ASC NULLS FIRST, inv2.d_moy ASC NULLS FIRST, inv2.mean ASC NULLS FIRST, inv2.cov ASC NULLS FIRST +02)--Projection: inv1.w_warehouse_sk AS wsk1, inv1.i_item_sk AS isk1, inv1.d_moy AS dmoy1, inv1.mean AS mean1, inv1.cov AS cov1, inv2.w_warehouse_sk, inv2.i_item_sk, inv2.d_moy, inv2.mean, inv2.cov +03)----Inner Join: inv1.i_item_sk = inv2.i_item_sk, inv1.w_warehouse_sk = inv2.w_warehouse_sk +04)------SubqueryAlias: inv1 +05)--------SubqueryAlias: inv +06)----------Projection: foo.w_warehouse_sk, foo.i_item_sk, foo.d_moy, foo.mean, CASE foo.mean WHEN Float64(0) THEN Float64(NULL) ELSE foo.stdev / foo.mean END AS cov +07)------------SubqueryAlias: foo +08)--------------Projection: warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy, stddev(inventory.inv_quantity_on_hand) AS stdev, avg(inventory.inv_quantity_on_hand) AS mean +09)----------------Filter: CASE avg(inventory.inv_quantity_on_hand) WHEN Float64(0) THEN Float64(0) ELSE stddev(inventory.inv_quantity_on_hand) / avg(inventory.inv_quantity_on_hand) END > Float64(1) +10)------------------Projection: warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy, stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand) +11)--------------------Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy]], aggr=[[stddev(__common_expr_1 AS inventory.inv_quantity_on_hand), avg(__common_expr_1 AS inventory.inv_quantity_on_hand)]] +12)----------------------Projection: CAST(inventory.inv_quantity_on_hand AS Float64) AS __common_expr_1, item.i_item_sk, warehouse.w_warehouse_sk, warehouse.w_warehouse_name, date_dim.d_moy +13)------------------------Inner Join: inventory.inv_date_sk = date_dim.d_date_sk +14)--------------------------Projection: inventory.inv_date_sk, inventory.inv_quantity_on_hand, item.i_item_sk, warehouse.w_warehouse_sk, warehouse.w_warehouse_name +15)----------------------------Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk +16)------------------------------Projection: inventory.inv_date_sk, inventory.inv_warehouse_sk, inventory.inv_quantity_on_hand, item.i_item_sk +17)--------------------------------Inner Join: inventory.inv_item_sk = item.i_item_sk +18)----------------------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] +19)----------------------------------TableScan: item projection=[i_item_sk] +20)------------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +21)--------------------------Projection: date_dim.d_date_sk, date_dim.d_moy +22)----------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(1) +23)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(1)] +24)------SubqueryAlias: inv2 +25)--------SubqueryAlias: inv +26)----------Projection: foo.w_warehouse_sk, foo.i_item_sk, foo.d_moy, foo.mean, CASE foo.mean WHEN Float64(0) THEN Float64(NULL) ELSE foo.stdev / foo.mean END AS cov +27)------------SubqueryAlias: foo +28)--------------Projection: warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy, stddev(inventory.inv_quantity_on_hand) AS stdev, avg(inventory.inv_quantity_on_hand) AS mean +29)----------------Filter: CASE avg(inventory.inv_quantity_on_hand) WHEN Float64(0) THEN Float64(0) ELSE stddev(inventory.inv_quantity_on_hand) / avg(inventory.inv_quantity_on_hand) END > Float64(1) +30)------------------Projection: warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy, stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand) +31)--------------------Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sk, item.i_item_sk, date_dim.d_moy]], aggr=[[stddev(__common_expr_2 AS inventory.inv_quantity_on_hand), avg(__common_expr_2 AS inventory.inv_quantity_on_hand)]] +32)----------------------Projection: CAST(inventory.inv_quantity_on_hand AS Float64) AS __common_expr_2, item.i_item_sk, warehouse.w_warehouse_sk, warehouse.w_warehouse_name, date_dim.d_moy +33)------------------------Inner Join: inventory.inv_date_sk = date_dim.d_date_sk +34)--------------------------Projection: inventory.inv_date_sk, inventory.inv_quantity_on_hand, item.i_item_sk, warehouse.w_warehouse_sk, warehouse.w_warehouse_name +35)----------------------------Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk +36)------------------------------Projection: inventory.inv_date_sk, inventory.inv_warehouse_sk, inventory.inv_quantity_on_hand, item.i_item_sk +37)--------------------------------Inner Join: inventory.inv_item_sk = item.i_item_sk +38)----------------------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] +39)----------------------------------TableScan: item projection=[i_item_sk] +40)------------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +41)--------------------------Projection: date_dim.d_date_sk, date_dim.d_moy +42)----------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(2) +43)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(2)] +physical_plan +01)SortPreservingMergeExec: [wsk1@0 ASC, isk1@1 ASC, dmoy1@2 ASC, mean1@3 ASC, cov1@4 ASC, d_moy@7 ASC, mean@8 ASC, cov@9 ASC] +02)--ProjectionExec: expr=[w_warehouse_sk@0 as wsk1, i_item_sk@1 as isk1, d_moy@2 as dmoy1, mean@3 as mean1, cov@4 as cov1, w_warehouse_sk@5 as w_warehouse_sk, i_item_sk@6 as i_item_sk, d_moy@7 as d_moy, mean@8 as mean, cov@9 as cov] +03)----SortExec: expr=[w_warehouse_sk@0 ASC, i_item_sk@1 ASC, mean@3 ASC, cov@4 ASC, mean@8 ASC, cov@9 ASC], preserve_partitioning=[true] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@1, i_item_sk@1), (w_warehouse_sk@0, w_warehouse_sk@0)] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[w_warehouse_sk@0 as w_warehouse_sk, i_item_sk@1 as i_item_sk, d_moy@2 as d_moy, avg(inventory.inv_quantity_on_hand)@4 as mean, CASE avg(inventory.inv_quantity_on_hand)@4 WHEN 0 THEN NULL ELSE stddev(inventory.inv_quantity_on_hand)@3 / avg(inventory.inv_quantity_on_hand)@4 END as cov] +07)------------FilterExec: CASE avg(inventory.inv_quantity_on_hand)@4 WHEN 0 THEN 0 ELSE stddev(inventory.inv_quantity_on_hand)@3 / avg(inventory.inv_quantity_on_hand)@4 END > 1 +08)--------------ProjectionExec: expr=[w_warehouse_sk@1 as w_warehouse_sk, i_item_sk@2 as i_item_sk, d_moy@3 as d_moy, stddev(inventory.inv_quantity_on_hand)@4 as stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)@5 as avg(inventory.inv_quantity_on_hand)] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sk@1 as w_warehouse_sk, i_item_sk@2 as i_item_sk, d_moy@3 as d_moy], aggr=[stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)], ordering_mode=PartiallySorted([3]) +10)------------------RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sk@1, i_item_sk@2, d_moy@3], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[w_warehouse_name@3 as w_warehouse_name, w_warehouse_sk@2 as w_warehouse_sk, i_item_sk@1 as i_item_sk, d_moy@4 as d_moy], aggr=[stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)], ordering_mode=PartiallySorted([3]) +12)----------------------ProjectionExec: expr=[CAST(inv_quantity_on_hand@0 AS Float64) as __common_expr_1, i_item_sk@1 as i_item_sk, w_warehouse_sk@2 as w_warehouse_sk, w_warehouse_name@3 as w_warehouse_name, d_moy@4 as d_moy] +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, inv_date_sk@0)], projection=[inv_quantity_on_hand@3, i_item_sk@4, w_warehouse_sk@5, w_warehouse_name@6, d_moy@1] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_moy], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 1 +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, inv_warehouse_sk@1)], projection=[inv_date_sk@2, inv_quantity_on_hand@4, i_item_sk@5, w_warehouse_sk@0, w_warehouse_name@1] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name], file_type=vortex +17)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[inv_date_sk@1, inv_warehouse_sk@3, inv_quantity_on_hand@4, i_item_sk@0] +18)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex +19)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +20)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand], file_type=vortex +21)--------ProjectionExec: expr=[w_warehouse_sk@0 as w_warehouse_sk, i_item_sk@1 as i_item_sk, d_moy@2 as d_moy, avg(inventory.inv_quantity_on_hand)@4 as mean, CASE avg(inventory.inv_quantity_on_hand)@4 WHEN 0 THEN NULL ELSE stddev(inventory.inv_quantity_on_hand)@3 / avg(inventory.inv_quantity_on_hand)@4 END as cov] +22)----------FilterExec: CASE avg(inventory.inv_quantity_on_hand)@4 WHEN 0 THEN 0 ELSE stddev(inventory.inv_quantity_on_hand)@3 / avg(inventory.inv_quantity_on_hand)@4 END > 1 +23)------------ProjectionExec: expr=[w_warehouse_sk@1 as w_warehouse_sk, i_item_sk@2 as i_item_sk, d_moy@3 as d_moy, stddev(inventory.inv_quantity_on_hand)@4 as stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)@5 as avg(inventory.inv_quantity_on_hand)] +24)--------------AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sk@1 as w_warehouse_sk, i_item_sk@2 as i_item_sk, d_moy@3 as d_moy], aggr=[stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)], ordering_mode=PartiallySorted([3]) +25)----------------RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sk@1, i_item_sk@2, d_moy@3], 4), input_partitions=4 +26)------------------AggregateExec: mode=Partial, gby=[w_warehouse_name@3 as w_warehouse_name, w_warehouse_sk@2 as w_warehouse_sk, i_item_sk@1 as i_item_sk, d_moy@4 as d_moy], aggr=[stddev(inventory.inv_quantity_on_hand), avg(inventory.inv_quantity_on_hand)], ordering_mode=PartiallySorted([3]) +27)--------------------ProjectionExec: expr=[CAST(inv_quantity_on_hand@0 AS Float64) as __common_expr_2, i_item_sk@1 as i_item_sk, w_warehouse_sk@2 as w_warehouse_sk, w_warehouse_name@3 as w_warehouse_name, d_moy@4 as d_moy] +28)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, inv_date_sk@0)], projection=[inv_quantity_on_hand@3, i_item_sk@4, w_warehouse_sk@5, w_warehouse_name@6, d_moy@1] +29)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_moy], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 2 +30)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, inv_warehouse_sk@1)], projection=[inv_date_sk@2, inv_quantity_on_hand@4, i_item_sk@5, w_warehouse_sk@0, w_warehouse_name@1] +31)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name], file_type=vortex +32)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[inv_date_sk@1, inv_warehouse_sk@3, inv_quantity_on_hand@4, i_item_sk@0] +33)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex +34)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +35)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no new file mode 100644 index 00000000000..eaced5a2cd9 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no @@ -0,0 +1,287 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2)) year_total, + 'c' sale_type + FROM customer, + catalog_sales, + date_dim + WHERE c_customer_sk = cs_bill_customer_sk + AND cs_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2)) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name, + t_s_secyear.customer_preferred_cust_flag +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_c_firstyear, + year_total t_c_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_c_secyear.customer_id + AND t_s_firstyear.customer_id = t_c_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_c_firstyear.sale_type = 'c' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_c_secyear.sale_type = 'c' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.dyear = 2001 + AND t_s_secyear.dyear = 2001+1 + AND t_c_firstyear.dyear = 2001 + AND t_c_secyear.dyear = 2001+1 + AND t_w_firstyear.dyear = 2001 + AND t_w_secyear.dyear = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_c_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_c_firstyear.year_total > 0 THEN t_c_secyear.year_total / t_c_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN t_s_secyear.year_total / t_s_firstyear.year_total + ELSE NULL + END + AND CASE + WHEN t_c_firstyear.year_total > 0 THEN t_c_secyear.year_total / t_c_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_w_firstyear.year_total > 0 THEN t_w_secyear.year_total / t_w_firstyear.year_total + ELSE NULL + END +ORDER BY t_s_secyear.customer_id NULLS FIRST, + t_s_secyear.customer_first_name NULLS FIRST, + t_s_secyear.customer_last_name NULLS FIRST, + t_s_secyear.customer_preferred_cust_flag NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: t_s_secyear.customer_id ASC NULLS FIRST, t_s_secyear.customer_first_name ASC NULLS FIRST, t_s_secyear.customer_last_name ASC NULLS FIRST, t_s_secyear.customer_preferred_cust_flag ASC NULLS FIRST, fetch=100 +02)--Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag +03)----Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_c_firstyear.year_total > Decimal128(0.000000,24,6) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE Decimal128(NULL,34,10) END > CASE WHEN t_w_firstyear.year_total > Decimal128(0.000000,24,6) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE Decimal128(NULL,34,10) END +04)------Projection: t_s_firstyear.customer_id, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag, t_c_firstyear.year_total, t_c_secyear.year_total, t_w_firstyear.year_total +05)--------Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id +06)----------Projection: t_s_firstyear.customer_id, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag, t_c_firstyear.year_total, t_c_secyear.year_total +07)------------Inner Join: t_s_firstyear.customer_id = t_c_secyear.customer_id Filter: CASE WHEN t_c_firstyear.year_total > Decimal128(0.000000,24,6) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE Decimal128(NULL,34,10) END > CASE WHEN t_s_firstyear.year_total > Decimal128(0.000000,24,6) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE Decimal128(NULL,34,10) END +08)--------------Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_preferred_cust_flag, t_s_secyear.year_total, t_c_firstyear.year_total +09)----------------Inner Join: t_s_firstyear.customer_id = t_c_firstyear.customer_id +10)------------------Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id +11)--------------------SubqueryAlias: t_s_firstyear +12)----------------------SubqueryAlias: year_total +13)------------------------Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total +14)--------------------------Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) > Decimal128(0.000000,24,6) +15)----------------------------Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) +16)------------------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(2,20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] +17)--------------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year +18)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +19)------------------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price +20)--------------------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +21)----------------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +22)----------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] +23)------------------------------------Filter: date_dim.d_year = Int64(2001) +24)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +25)--------------------SubqueryAlias: t_s_secyear +26)----------------------SubqueryAlias: year_total +27)------------------------Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_preferred_cust_flag AS customer_preferred_cust_flag, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total +28)--------------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(2,20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] +29)----------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year +30)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +31)--------------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price +32)----------------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +33)------------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +34)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] +35)--------------------------------Filter: date_dim.d_year = Int64(2002) +36)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +37)------------------SubqueryAlias: t_c_firstyear +38)--------------------SubqueryAlias: year_total +39)----------------------Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total +40)------------------------Filter: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) > Decimal128(0.000000,24,6) +41)--------------------------Projection: customer.c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) +42)----------------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(2,20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] +43)------------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year +44)--------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +45)----------------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price +46)------------------------------------Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk +47)--------------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +48)--------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] +49)----------------------------------Filter: date_dim.d_year = Int64(2001) +50)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +51)--------------SubqueryAlias: t_c_secyear +52)----------------SubqueryAlias: year_total +53)------------------Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total +54)--------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(2,20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] +55)----------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year +56)------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +57)--------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price +58)----------------------------Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk +59)------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +60)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] +61)--------------------------Filter: date_dim.d_year = Int64(2002) +62)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +63)----------SubqueryAlias: t_w_firstyear +64)------------SubqueryAlias: year_total +65)--------------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total +66)----------------Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) > Decimal128(0.000000,24,6) +67)------------------Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) +68)--------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(2,20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] +69)----------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year +70)------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +71)--------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price +72)----------------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +73)------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +74)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] +75)--------------------------Filter: date_dim.d_year = Int64(2001) +76)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +77)------SubqueryAlias: t_w_secyear +78)--------SubqueryAlias: year_total +79)----------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total +80)------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(2,20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] +81)--------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year +82)----------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +83)------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price +84)--------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +85)----------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], partial_filters=[Boolean(true)] +86)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] +87)------------------Filter: date_dim.d_year = Int64(2002) +88)--------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +physical_plan +01)SortPreservingMergeExec: [customer_id@0 ASC, customer_first_name@1 ASC, customer_last_name@2 ASC, customer_preferred_cust_flag@3 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[customer_id@0 ASC, customer_first_name@1 ASC, customer_last_name@2 ASC, customer_preferred_cust_flag@3 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@0 > 0.000000 THEN year_total@1 / year_total@0 END > CASE WHEN year_total@2 > 0.000000 THEN year_total@3 / year_total@2 END, projection=[customer_id@1, customer_first_name@2, customer_last_name@3, customer_preferred_cust_flag@4] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@2, customer_id@3, customer_first_name@4, customer_last_name@5, customer_preferred_cust_flag@6, year_total@7, year_total@8, year_total@1] +06)----------CoalescePartitionsExec +07)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 as year_total] +08)--------------FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 > 0.000000 +09)----------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] +10)------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / 2) as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +11)--------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / 2) as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13, d_year@1] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price], file_type=vortex +18)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > 0.000000 THEN year_total@3 / year_total@2 END > CASE WHEN year_total@0 > 0.000000 THEN year_total@1 / year_total@0 END, projection=[customer_id@0, customer_id@2, customer_first_name@3, customer_last_name@4, customer_preferred_cust_flag@5, year_total@7, year_total@9] +19)------------CoalescePartitionsExec +20)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@2, year_total@3, customer_id@4, customer_first_name@5, customer_last_name@6, customer_preferred_cust_flag@7, year_total@8, year_total@1] +21)----------------CoalescePartitionsExec +22)------------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 as year_total] +23)--------------------FilterExec: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 > 0.000000 +24)----------------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] +25)------------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / 2) as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +26)--------------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +27)----------------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / 2) as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +28)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13, d_year@1] +29)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +30)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] +31)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +32)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price], file_type=vortex +33)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)] +34)------------------CoalescePartitionsExec +35)--------------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 as year_total] +36)----------------------FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 > 0.000000 +37)------------------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] +38)--------------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / 2) as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +39)----------------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +40)------------------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / 2) as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +41)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13, d_year@1] +42)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +43)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] +44)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +45)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price], file_type=vortex +46)------------------ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_preferred_cust_flag@3 as customer_preferred_cust_flag, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as year_total] +47)--------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / 2) as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +48)----------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +49)------------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / 2) as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +50)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13, d_year@1] +51)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +52)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] +53)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +54)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price], file_type=vortex +55)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as year_total] +56)--------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / 2) as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +57)----------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +58)------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / 2) as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +59)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13, d_year@1] +60)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +61)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] +62)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +63)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price], file_type=vortex +64)------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as year_total] +65)--------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / 2) as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +66)----------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 4), input_partitions=4 +67)------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / 2) as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))], ordering_mode=PartiallySorted([7]) +68)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@7)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, c_preferred_cust_flag@5, c_birth_country@6, c_login@7, c_email_address@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13, d_year@1] +69)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +70)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] +71)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], file_type=vortex +72)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q40.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q40.slt.no new file mode 100644 index 00000000000..0c498494c56 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q40.slt.no @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT w_state, + i_item_id, + sum(CASE + WHEN (cast(d_date AS date) < CAST ('2000-03-11' AS date)) THEN cs_sales_price - coalesce(cr_refunded_cash,0) + ELSE 0 + END) AS sales_before, + sum(CASE + WHEN (cast(d_date AS date) >= CAST ('2000-03-11' AS date)) THEN cs_sales_price - coalesce(cr_refunded_cash,0) + ELSE 0 + END) AS sales_after +FROM catalog_sales +LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number + AND cs_item_sk = cr_item_sk) ,warehouse, + item, + date_dim +WHERE i_current_price BETWEEN 0.99 AND 1.49 + AND i_item_sk = cs_item_sk + AND cs_warehouse_sk = w_warehouse_sk + AND cs_sold_date_sk = d_date_sk + AND d_date BETWEEN CAST ('2000-02-10' AS date) AND CAST ('2000-04-10' AS date) +GROUP BY w_state, + i_item_id +ORDER BY w_state, + i_item_id +LIMIT 100; +---- +logical_plan +01)Sort: warehouse.w_state ASC NULLS LAST, item.i_item_id ASC NULLS LAST, fetch=100 +02)--Projection: warehouse.w_state, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_after +03)----Aggregate: groupBy=[[warehouse.w_state, item.i_item_id]], aggr=[[sum(CASE WHEN date_dim.d_date < Date32("2000-03-11") THEN catalog_sales.cs_sales_price - CASE WHEN CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)) IS NOT NULL THEN CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)) ELSE Decimal128(0.00,22,2) END ELSE Decimal128(0.00,23,2) END) AS sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Date32("2000-03-11") THEN catalog_sales.cs_sales_price - CASE WHEN CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)) IS NOT NULL THEN CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)) ELSE Decimal128(0.00,22,2) END ELSE Decimal128(0.00,23,2) END) AS sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)]] +04)------Projection: catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state, item.i_item_id, date_dim.d_date +05)--------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +06)----------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state, item.i_item_id +07)------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +08)--------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state +09)----------------Inner Join: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk +10)------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash +11)--------------------Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk +12)----------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_warehouse_sk, cs_item_sk, cs_order_number, cs_sales_price] +13)----------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash] +14)------------------TableScan: warehouse projection=[w_warehouse_sk, w_state] +15)--------------Projection: item.i_item_sk, item.i_item_id +16)----------------Filter: item.i_current_price >= Decimal128(0.99,7,2) AND item.i_current_price <= Decimal128(1.49,7,2) +17)------------------TableScan: item projection=[i_item_sk, i_item_id, i_current_price], partial_filters=[item.i_current_price >= Decimal128(0.99,7,2), item.i_current_price <= Decimal128(1.49,7,2)] +18)----------Filter: date_dim.d_date >= Date32("2000-02-10") AND date_dim.d_date <= Date32("2000-04-10") +19)------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-02-10"), date_dim.d_date <= Date32("2000-04-10")] +physical_plan +01)SortPreservingMergeExec: [w_state@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[w_state@0 as w_state, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)@2 as sales_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)@3 as sales_after] +03)----SortExec: TopK(fetch=100), expr=[w_state@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[w_state@0 as w_state, i_item_id@1 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < 2000-03-11 THEN catalog_sales.cs_sales_price - CASE WHEN catalog_returns.cr_refunded_cash IS NOT NULL THEN catalog_returns.cr_refunded_cash ELSE 0.00 END ELSE 0.00 END) as sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= 2000-03-11 THEN catalog_sales.cs_sales_price - CASE WHEN catalog_returns.cr_refunded_cash IS NOT NULL THEN catalog_returns.cr_refunded_cash ELSE 0.00 END ELSE 0.00 END) as sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)] +05)--------RepartitionExec: partitioning=Hash([w_state@0, i_item_id@1], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[w_state@2 as w_state, i_item_id@3 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < 2000-03-11 THEN catalog_sales.cs_sales_price - CASE WHEN catalog_returns.cr_refunded_cash IS NOT NULL THEN catalog_returns.cr_refunded_cash ELSE 0.00 END ELSE 0.00 END) as sum(CASE WHEN date_dim.d_date < Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= 2000-03-11 THEN catalog_sales.cs_sales_price - CASE WHEN catalog_returns.cr_refunded_cash IS NOT NULL THEN catalog_returns.cr_refunded_cash ELSE 0.00 END ELSE 0.00 END) as sum(CASE WHEN date_dim.d_date >= Utf8("2000-03-11") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_sales_price@3, cr_refunded_cash@4, w_state@5, i_item_id@6, d_date@1] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_date@2 >= 2000-02-10 AND d_date@2 <= 2000-04-10 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@2, cs_sales_price@4, cr_refunded_cash@5, w_state@6, i_item_id@1] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, predicate: i_current_price@5 >= 0.99 AND i_current_price@5 <= 1.49 +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, cs_warehouse_sk@1)], projection=[cs_sold_date_sk@2, cs_item_sk@4, cs_sales_price@5, cr_refunded_cash@6, w_state@1] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_state], file_type=vortex +13)------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(cr_order_number@1, cs_order_number@3), (cr_item_sk@0, cs_item_sk@2)], projection=[cs_sold_date_sk@3, cs_warehouse_sk@4, cs_item_sk@5, cs_sales_price@7, cr_refunded_cash@2] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash], file_type=vortex +15)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_warehouse_sk, cs_item_sk, cs_order_number, cs_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no new file mode 100644 index 00000000000..6e4870594ee --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no @@ -0,0 +1,105 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT distinct(i_product_name) +FROM item i1 +WHERE i_manufact_id BETWEEN 738 AND 738+40 + AND + (SELECT count(*) AS item_cnt + FROM item + WHERE (i_manufact = i1.i_manufact + AND ((i_category = 'Women' + AND (i_color = 'powder' + OR i_color = 'khaki') + AND (i_units = 'Ounce' + OR i_units = 'Oz') + AND (i_size = 'medium' + OR i_size = 'extra large')) + OR (i_category = 'Women' + AND (i_color = 'brown' + OR i_color = 'honeydew') + AND (i_units = 'Bunch' + OR i_units = 'Ton') + AND (i_size = 'N/A' + OR i_size = 'small')) + OR (i_category = 'Men' + AND (i_color = 'floral' + OR i_color = 'deep') + AND (i_units = 'N/A' + OR i_units = 'Dozen') + AND (i_size = 'petite' + OR i_size = 'petite')) + OR (i_category = 'Men' + AND (i_color = 'light' + OR i_color = 'cornflower') + AND (i_units = 'Box' + OR i_units = 'Pound') + AND (i_size = 'medium' + OR i_size = 'extra large')))) + OR (i_manufact = i1.i_manufact + AND ((i_category = 'Women' + AND (i_color = 'midnight' + OR i_color = 'snow') + AND (i_units = 'Pallet' + OR i_units = 'Gross') + AND (i_size = 'medium' + OR i_size = 'extra large')) + OR (i_category = 'Women' + AND (i_color = 'cyan' + OR i_color = 'papaya') + AND (i_units = 'Cup' + OR i_units = 'Dram') + AND (i_size = 'N/A' + OR i_size = 'small')) + OR (i_category = 'Men' + AND (i_color = 'orange' + OR i_color = 'frosted') + AND (i_units = 'Each' + OR i_units = 'Tbl') + AND (i_size = 'petite' + OR i_size = 'petite')) + OR (i_category = 'Men' + AND (i_color = 'forest' + OR i_color = 'ghost') + AND (i_units = 'Lb' + OR i_units = 'Bundle') + AND (i_size = 'medium' + OR i_size = 'extra large'))))) > 0 +ORDER BY i_product_name +LIMIT 100; +---- +logical_plan +01)Sort: i1.i_product_name ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[i1.i_product_name]], aggr=[[]] +03)----Projection: i1.i_product_name +04)------Filter: CASE WHEN __scalar_sq_1.__always_true IS NULL THEN Int64(0) ELSE __scalar_sq_1.item_cnt END > Int64(0) +05)--------Projection: i1.i_product_name, __scalar_sq_1.item_cnt, __scalar_sq_1.__always_true +06)----------Left Join: i1.i_manufact = __scalar_sq_1.i_manufact +07)------------SubqueryAlias: i1 +08)--------------Projection: item.i_manufact, item.i_product_name +09)----------------Filter: item.i_manufact_id >= Int64(738) AND item.i_manufact_id <= Int64(778) +10)------------------TableScan: item projection=[i_manufact_id, i_manufact, i_product_name], partial_filters=[item.i_manufact_id >= Int64(738), item.i_manufact_id <= Int64(778)] +11)------------SubqueryAlias: __scalar_sq_1 +12)--------------Projection: count(Int64(1)) AS item_cnt, item.i_manufact, Boolean(true) AS __always_true +13)----------------Aggregate: groupBy=[[item.i_manufact]], aggr=[[count(Int64(1))]] +14)------------------Projection: item.i_manufact +15)--------------------Filter: __common_expr_4 AND ((item.i_color = Utf8View("powder") OR item.i_color = Utf8View("khaki")) AND (item.i_units = Utf8View("Ounce") OR item.i_units = Utf8View("Oz")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR (item.i_color = Utf8View("brown") OR item.i_color = Utf8View("honeydew")) AND (item.i_units = Utf8View("Bunch") OR item.i_units = Utf8View("Ton")) AND (item.i_size = Utf8View("N/A") OR item.i_size = Utf8View("small"))) OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("floral") OR item.i_color = Utf8View("deep")) AND (item.i_units = Utf8View("N/A") OR item.i_units = Utf8View("Dozen")) AND item.i_size = Utf8View("petite") OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("light") OR item.i_color = Utf8View("cornflower")) AND (item.i_units = Utf8View("Box") OR item.i_units = Utf8View("Pound")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR __common_expr_4 AND ((item.i_color = Utf8View("midnight") OR item.i_color = Utf8View("snow")) AND (item.i_units = Utf8View("Pallet") OR item.i_units = Utf8View("Gross")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR (item.i_color = Utf8View("cyan") OR item.i_color = Utf8View("papaya")) AND (item.i_units = Utf8View("Cup") OR item.i_units = Utf8View("Dram")) AND (item.i_size = Utf8View("N/A") OR item.i_size = Utf8View("small"))) OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("orange") OR item.i_color = Utf8View("frosted")) AND (item.i_units = Utf8View("Each") OR item.i_units = Utf8View("Tbl")) AND item.i_size = Utf8View("petite") OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("forest") OR item.i_color = Utf8View("ghost")) AND (item.i_units = Utf8View("Lb") OR item.i_units = Utf8View("Bundle")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) +16)----------------------Projection: item.i_category = Utf8View("Women") AS __common_expr_4, item.i_category, item.i_manufact, item.i_size, item.i_color, item.i_units +17)------------------------TableScan: item projection=[i_category, i_manufact, i_size, i_color, i_units], partial_filters=[item.i_category = Utf8View("Women") AND ((item.i_color = Utf8View("powder") OR item.i_color = Utf8View("khaki")) AND (item.i_units = Utf8View("Ounce") OR item.i_units = Utf8View("Oz")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR (item.i_color = Utf8View("brown") OR item.i_color = Utf8View("honeydew")) AND (item.i_units = Utf8View("Bunch") OR item.i_units = Utf8View("Ton")) AND (item.i_size = Utf8View("N/A") OR item.i_size = Utf8View("small"))) OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("floral") OR item.i_color = Utf8View("deep")) AND (item.i_units = Utf8View("N/A") OR item.i_units = Utf8View("Dozen")) AND item.i_size = Utf8View("petite") OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("light") OR item.i_color = Utf8View("cornflower")) AND (item.i_units = Utf8View("Box") OR item.i_units = Utf8View("Pound")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR item.i_category = Utf8View("Women") AND ((item.i_color = Utf8View("midnight") OR item.i_color = Utf8View("snow")) AND (item.i_units = Utf8View("Pallet") OR item.i_units = Utf8View("Gross")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large")) OR (item.i_color = Utf8View("cyan") OR item.i_color = Utf8View("papaya")) AND (item.i_units = Utf8View("Cup") OR item.i_units = Utf8View("Dram")) AND (item.i_size = Utf8View("N/A") OR item.i_size = Utf8View("small"))) OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("orange") OR item.i_color = Utf8View("frosted")) AND (item.i_units = Utf8View("Each") OR item.i_units = Utf8View("Tbl")) AND item.i_size = Utf8View("petite") OR item.i_category = Utf8View("Men") AND (item.i_color = Utf8View("forest") OR item.i_color = Utf8View("ghost")) AND (item.i_units = Utf8View("Lb") OR item.i_units = Utf8View("Bundle")) AND (item.i_size = Utf8View("medium") OR item.i_size = Utf8View("extra large"))] +physical_plan +01)SortPreservingMergeExec: [i_product_name@0 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_product_name@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name], aggr=[], lim=[100] +04)------RepartitionExec: partitioning=Hash([i_product_name@0], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[i_product_name@0 as i_product_name], aggr=[], lim=[100] +06)----------FilterExec: CASE WHEN __always_true@2 IS NULL THEN 0 ELSE item_cnt@1 END > 0, projection=[i_product_name@0] +07)------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(i_manufact@0, i_manufact@1)], projection=[i_product_name@1, item_cnt@2, __always_true@4] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_manufact, i_product_name], file_type=vortex, predicate: i_manufact_id@13 >= 738 AND i_manufact_id@13 <= 778 +09)--------------ProjectionExec: expr=[count(Int64(1))@1 as item_cnt, i_manufact@0 as i_manufact, true as __always_true] +10)----------------AggregateExec: mode=FinalPartitioned, gby=[i_manufact@0 as i_manufact], aggr=[count(Int64(1))] +11)------------------RepartitionExec: partitioning=Hash([i_manufact@0], 4), input_partitions=4 +12)--------------------AggregateExec: mode=Partial, gby=[i_manufact@0 as i_manufact], aggr=[count(Int64(1))] +13)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_manufact], file_type=vortex, predicate: i_category@12 = Women AND ((i_color@17 = powder OR i_color@17 = khaki) AND (i_units@18 = Ounce OR i_units@18 = Oz) AND (i_size@15 = medium OR i_size@15 = extra large) OR (i_color@17 = brown OR i_color@17 = honeydew) AND (i_units@18 = Bunch OR i_units@18 = Ton) AND (i_size@15 = N/A OR i_size@15 = small)) OR i_category@12 = Men AND (i_color@17 = floral OR i_color@17 = deep) AND (i_units@18 = N/A OR i_units@18 = Dozen) AND i_size@15 = petite OR i_category@12 = Men AND (i_color@17 = light OR i_color@17 = cornflower) AND (i_units@18 = Box OR i_units@18 = Pound) AND (i_size@15 = medium OR i_size@15 = extra large) OR i_category@12 = Women AND ((i_color@17 = midnight OR i_color@17 = snow) AND (i_units@18 = Pallet OR i_units@18 = Gross) AND (i_size@15 = medium OR i_size@15 = extra large) OR (i_color@17 = cyan OR i_color@17 = papaya) AND (i_units@18 = Cup OR i_units@18 = Dram) AND (i_size@15 = N/A OR i_size@15 = small)) OR i_category@12 = Men AND (i_color@17 = orange OR i_color@17 = frosted) AND (i_units@18 = Each OR i_units@18 = Tbl) AND i_size@15 = petite OR i_category@12 = Men AND (i_color@17 = forest OR i_color@17 = ghost) AND (i_units@18 = Lb OR i_units@18 = Bundle) AND (i_size@15 = medium OR i_size@15 = extra large) diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q42.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q42.slt.no new file mode 100644 index 00000000000..f6c01955e7a --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q42.slt.no @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT dt.d_year, + item.i_category_id, + item.i_category, + sum(ss_ext_sales_price) +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manager_id = 1 + AND dt.d_moy=11 + AND dt.d_year=2000 +GROUP BY dt.d_year, + item.i_category_id, + item.i_category +ORDER BY sum(ss_ext_sales_price) DESC,dt.d_year, + item.i_category_id, + item.i_category +LIMIT 100 ; +---- +logical_plan +01)Sort: sum(store_sales.ss_ext_sales_price) DESC NULLS FIRST, dt.d_year ASC NULLS LAST, item.i_category_id ASC NULLS LAST, item.i_category ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[dt.d_year, item.i_category_id, item.i_category]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +03)----Projection: dt.d_year, store_sales.ss_ext_sales_price, item.i_category_id, item.i_category +04)------Inner Join: store_sales.ss_item_sk = item.i_item_sk +05)--------Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_ext_sales_price +06)----------Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk +07)------------SubqueryAlias: dt +08)--------------Projection: date_dim.d_date_sk, date_dim.d_year +09)----------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(2000) +10)------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(2000)] +11)------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +12)--------Projection: item.i_item_sk, item.i_category_id, item.i_category +13)----------Filter: item.i_manager_id = Int64(1) +14)------------TableScan: item projection=[i_item_sk, i_category_id, i_category, i_manager_id], partial_filters=[item.i_manager_id = Int64(1)] +physical_plan +01)SortPreservingMergeExec: [sum(store_sales.ss_ext_sales_price)@3 DESC, d_year@0 ASC NULLS LAST, i_category_id@1 ASC NULLS LAST, i_category@2 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[sum(store_sales.ss_ext_sales_price)@3 DESC, i_category_id@1 ASC NULLS LAST, i_category@2 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_category_id@1 as i_category_id, i_category@2 as i_category], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([0]) +04)------RepartitionExec: partitioning=Hash([d_year@0, i_category_id@1, i_category@2], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_category_id@2 as i_category_id, i_category@3 as i_category], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([0]) +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[d_year@3, ss_ext_sales_price@5, i_category_id@1, i_category@2] +07)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_category_id, i_category], file_type=vortex, predicate: i_manager_id@20 = 1 +08)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_ext_sales_price@4] +09)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 2000 +10)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no new file mode 100644 index 00000000000..9c948da0617 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT s_store_name, + s_store_id, + sum(CASE + WHEN (d_day_name='Sunday') THEN ss_sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN ss_sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN ss_sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN ss_sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN ss_sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN ss_sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN ss_sales_price + ELSE NULL + END) sat_sales +FROM date_dim, + store_sales, + store +WHERE d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + AND s_gmt_offset = -5 + AND d_year = 2000 +GROUP BY s_store_name, + s_store_id +ORDER BY s_store_name, + s_store_id, + sun_sales, + mon_sales, + tue_sales, + wed_sales, + thu_sales, + fri_sales, + sat_sales +LIMIT 100; +---- +logical_plan +01)Sort: store.s_store_name ASC NULLS LAST, store.s_store_id ASC NULLS LAST, fetch=100 +02)--Projection: store.s_store_name, store.s_store_id, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales +03)----Aggregate: groupBy=[[store.s_store_name, store.s_store_id]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8View("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] +04)------Projection: date_dim.d_day_name, store_sales.ss_sales_price, store.s_store_id, store.s_store_name +05)--------Inner Join: store_sales.ss_store_sk = store.s_store_sk +06)----------Projection: date_dim.d_day_name, store_sales.ss_store_sk, store_sales.ss_sales_price +07)------------Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk +08)--------------Projection: date_dim.d_date_sk, date_dim.d_day_name +09)----------------Filter: date_dim.d_year = Int64(2000) +10)------------------TableScan: date_dim projection=[d_date_sk, d_year, d_day_name], partial_filters=[date_dim.d_year = Int64(2000)] +11)--------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] +12)----------Projection: store.s_store_sk, store.s_store_id, store.s_store_name +13)------------Filter: store.s_gmt_offset = Decimal128(-5.00,5,2) +14)--------------TableScan: store projection=[s_store_sk, s_store_id, s_store_name, s_gmt_offset], partial_filters=[store.s_gmt_offset = Decimal128(-5.00,5,2)] +physical_plan +01)SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST, s_store_id@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[s_store_name@0 as s_store_name, s_store_id@1 as s_store_id, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] +03)----SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST, s_store_id@1 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name, s_store_id@1 as s_store_id], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +05)--------RepartitionExec: partitioning=Hash([s_store_name@0, s_store_id@1], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[s_store_name@3 as s_store_name, s_store_id@2 as s_store_id], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[d_day_name@3, ss_sales_price@5, s_store_id@1, s_store_name@2] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id, s_store_name], file_type=vortex, predicate: s_gmt_offset@27 = -5.00 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_day_name@1, ss_store_sk@3, ss_sales_price@4] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_day_name], file_type=vortex, predicate: d_year@6 = 2000 +11)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no new file mode 100644 index 00000000000..aadaebf13b2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no @@ -0,0 +1,147 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT asceding.rnk, + i1.i_product_name best_performing, + i2.i_product_name worst_performing +FROM + (SELECT * + FROM + (SELECT item_sk, + rank() OVER ( + ORDER BY rank_col ASC) rnk + FROM + (SELECT ss_item_sk item_sk, + avg(ss_net_profit) rank_col + FROM store_sales ss1 + WHERE ss_store_sk = 4 + GROUP BY ss_item_sk + HAVING avg(ss_net_profit) > 0.9* + (SELECT avg(ss_net_profit) rank_col + FROM store_sales + WHERE ss_store_sk = 4 + AND ss_addr_sk IS NULL + GROUP BY ss_store_sk))V1)V11 + WHERE rnk < 11) asceding, + (SELECT * + FROM + (SELECT item_sk, + rank() OVER ( + ORDER BY rank_col DESC) rnk + FROM + (SELECT ss_item_sk item_sk, + avg(ss_net_profit) rank_col + FROM store_sales ss1 + WHERE ss_store_sk = 4 + GROUP BY ss_item_sk + HAVING avg(ss_net_profit) > 0.9* + (SELECT avg(ss_net_profit) rank_col + FROM store_sales + WHERE ss_store_sk = 4 + AND ss_addr_sk IS NULL + GROUP BY ss_store_sk))V2)V21 + WHERE rnk < 11) descending, + item i1, + item i2 +WHERE asceding.rnk = descending.rnk + AND i1.i_item_sk=asceding.item_sk + AND i2.i_item_sk=descending.item_sk +ORDER BY asceding.rnk +LIMIT 100; +---- +logical_plan +01)Sort: asceding.rnk ASC NULLS LAST, fetch=100 +02)--Projection: asceding.rnk, i1.i_product_name AS best_performing, i2.i_product_name AS worst_performing +03)----Inner Join: descending.item_sk = i2.i_item_sk +04)------Projection: asceding.rnk, descending.item_sk, i1.i_product_name +05)--------Inner Join: asceding.item_sk = i1.i_item_sk +06)----------Projection: asceding.item_sk, asceding.rnk, descending.item_sk +07)------------Inner Join: asceding.rnk = descending.rnk +08)--------------SubqueryAlias: asceding +09)----------------SubqueryAlias: v11 +10)------------------Projection: v1.item_sk, rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk +11)--------------------Filter: rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW < UInt64(11) +12)----------------------Projection: v1.item_sk, rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +13)------------------------WindowAggr: windowExpr=[[rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +14)--------------------------SubqueryAlias: v1 +15)----------------------------Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col +16)------------------------------Filter: CAST(avg(ss1.ss_net_profit) AS Decimal128(30, 15)) > CAST(Float64(0.9) * () AS Decimal128(30, 15)) +17)--------------------------------Subquery: +18)----------------------------------Projection: CAST(avg(store_sales.ss_net_profit) AS rank_col AS Float64) +19)------------------------------------Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] +20)--------------------------------------Projection: store_sales.ss_store_sk, store_sales.ss_net_profit +21)----------------------------------------Filter: store_sales.ss_store_sk = Int64(4) AND store_sales.ss_addr_sk IS NULL +22)------------------------------------------TableScan: store_sales projection=[ss_addr_sk, ss_store_sk, ss_net_profit], partial_filters=[store_sales.ss_store_sk = Int64(4), store_sales.ss_addr_sk IS NULL] +23)--------------------------------Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] +24)----------------------------------SubqueryAlias: ss1 +25)------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_net_profit +26)--------------------------------------Filter: store_sales.ss_store_sk = Int64(4) +27)----------------------------------------TableScan: store_sales projection=[ss_item_sk, ss_store_sk, ss_net_profit], partial_filters=[store_sales.ss_store_sk = Int64(4)] +28)--------------SubqueryAlias: descending +29)----------------SubqueryAlias: v21 +30)------------------Projection: v2.item_sk, rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk +31)--------------------Filter: rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW < UInt64(11) +32)----------------------Projection: v2.item_sk, rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +33)------------------------WindowAggr: windowExpr=[[rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +34)--------------------------SubqueryAlias: v2 +35)----------------------------Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col +36)------------------------------Filter: CAST(avg(ss1.ss_net_profit) AS Decimal128(30, 15)) > CAST(Float64(0.9) * () AS Decimal128(30, 15)) +37)--------------------------------Subquery: +38)----------------------------------Projection: CAST(avg(store_sales.ss_net_profit) AS rank_col AS Float64) +39)------------------------------------Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] +40)--------------------------------------Projection: store_sales.ss_store_sk, store_sales.ss_net_profit +41)----------------------------------------Filter: store_sales.ss_store_sk = Int64(4) AND store_sales.ss_addr_sk IS NULL +42)------------------------------------------TableScan: store_sales projection=[ss_addr_sk, ss_store_sk, ss_net_profit], partial_filters=[store_sales.ss_store_sk = Int64(4), store_sales.ss_addr_sk IS NULL] +43)--------------------------------Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] +44)----------------------------------SubqueryAlias: ss1 +45)------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_net_profit +46)--------------------------------------Filter: store_sales.ss_store_sk = Int64(4) +47)----------------------------------------TableScan: store_sales projection=[ss_item_sk, ss_store_sk, ss_net_profit], partial_filters=[store_sales.ss_store_sk = Int64(4)] +48)----------SubqueryAlias: i1 +49)------------TableScan: item projection=[i_item_sk, i_product_name] +50)------SubqueryAlias: i2 +51)--------TableScan: item projection=[i_item_sk, i_product_name] +physical_plan +01)ScalarSubqueryExec: subqueries=1 +02)--SortExec: TopK(fetch=100), expr=[rnk@0 ASC NULLS LAST], preserve_partitioning=[false] +03)----ProjectionExec: expr=[rnk@0 as rnk, i_product_name@1 as best_performing, i_product_name@2 as worst_performing] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_sk@1, i_item_sk@0)], projection=[rnk@0, i_product_name@2, i_product_name@4] +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_sk@0, i_item_sk@0)], projection=[rnk@1, item_sk@2, i_product_name@4] +06)----------CoalescePartitionsExec +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(rnk@1, rnk@1)], projection=[item_sk@0, rnk@1, item_sk@2] +08)--------------CoalescePartitionsExec +09)----------------ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 as rnk] +10)------------------FilterExec: rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 < 11 +11)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true +12)----------------------ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +13)------------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [v1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +14)--------------------------SortPreservingMergeExec: [rank_col@1 ASC NULLS LAST] +15)----------------------------ProjectionExec: expr=[ss_item_sk@0 as item_sk, avg(ss1.ss_net_profit)@1 as rank_col] +16)------------------------------SortExec: expr=[avg(ss1.ss_net_profit)@1 ASC NULLS LAST], preserve_partitioning=[true] +17)--------------------------------FilterExec: CAST(avg(ss1.ss_net_profit)@1 AS Decimal128(30, 15)) > CAST(0.9 * scalar_subquery() AS Decimal128(30, 15)) +18)----------------------------------AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] +19)------------------------------------RepartitionExec: partitioning=Hash([ss_item_sk@0], 4), input_partitions=4 +20)--------------------------------------AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] +21)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk, ss_net_profit], file_type=vortex, predicate: ss_store_sk@7 = 4 +22)--------------ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 as rnk] +23)----------------FilterExec: rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 < 11 +24)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true +25)--------------------ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +26)----------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [v2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +27)------------------------SortPreservingMergeExec: [rank_col@1 DESC] +28)--------------------------ProjectionExec: expr=[ss_item_sk@0 as item_sk, avg(ss1.ss_net_profit)@1 as rank_col] +29)----------------------------SortExec: expr=[avg(ss1.ss_net_profit)@1 DESC], preserve_partitioning=[true] +30)------------------------------FilterExec: CAST(avg(ss1.ss_net_profit)@1 AS Decimal128(30, 15)) > CAST(0.9 * scalar_subquery() AS Decimal128(30, 15)) +31)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] +32)----------------------------------RepartitionExec: partitioning=Hash([ss_item_sk@0], 4), input_partitions=4 +33)------------------------------------AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] +34)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk, ss_net_profit], file_type=vortex, predicate: ss_store_sk@7 = 4 +35)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex +36)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex +37)--ProjectionExec: expr=[CAST(avg(store_sales.ss_net_profit)@1 AS Float64) as rank_col] +38)----AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)], ordering_mode=Sorted +39)------RepartitionExec: partitioning=Hash([ss_store_sk@0], 4), input_partitions=4 +40)--------AggregateExec: mode=Partial, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)], ordering_mode=Sorted +41)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_store_sk, ss_net_profit], file_type=vortex, predicate: ss_store_sk@7 = 4 AND ss_addr_sk@6 IS NULL diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no new file mode 100644 index 00000000000..3e0fcda39e2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no @@ -0,0 +1,91 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT ca_zip, + ca_city, + sum(ws_sales_price) +FROM web_sales, + customer, + customer_address, + date_dim, + item +WHERE ws_bill_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND ws_item_sk = i_item_sk + AND (SUBSTRING(ca_zip,1,5) IN ('85669', + '86197', + '88274', + '83405', + '86475', + '85392', + '85460', + '80348', + '81792') + OR i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_item_sk IN (2, + 3, + 5, + 7, + 11, + 13, + 17, + 19, + 23, + 29) )) + AND ws_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 2001 +GROUP BY ca_zip, + ca_city +ORDER BY ca_zip, + ca_city +LIMIT 100; +---- +logical_plan +01)Sort: customer_address.ca_zip ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[customer_address.ca_zip, customer_address.ca_city]], aggr=[[sum(web_sales.ws_sales_price)]] +03)----Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip +04)------Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8View("85669"), Utf8View("86197"), Utf8View("88274"), Utf8View("83405"), Utf8View("86475"), Utf8View("85392"), Utf8View("85460"), Utf8View("80348"), Utf8View("81792")]) OR __correlated_sq_1.mark +05)--------Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip, __correlated_sq_1.mark +06)----------LeftMark Join: item.i_item_id = __correlated_sq_1.i_item_id +07)------------Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip, item.i_item_id +08)--------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +09)----------------Projection: web_sales.ws_item_sk, web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip +10)------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +11)--------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip +12)----------------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +13)------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_sales_price, customer.c_current_addr_sk +14)--------------------------Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk +15)----------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_sales_price] +16)----------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +17)------------------------TableScan: customer_address projection=[ca_address_sk, ca_city, ca_zip] +18)--------------------Projection: date_dim.d_date_sk +19)----------------------Filter: date_dim.d_qoy = Int64(2) AND date_dim.d_year = Int64(2001) +20)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2001)] +21)----------------TableScan: item projection=[i_item_sk, i_item_id] +22)------------SubqueryAlias: __correlated_sq_1 +23)--------------Projection: item.i_item_id +24)----------------Filter: item.i_item_sk IN ([Int64(2), Int64(3), Int64(5), Int64(7), Int64(11), Int64(13), Int64(17), Int64(19), Int64(23), Int64(29)]) +25)------------------TableScan: item projection=[i_item_sk, i_item_id], partial_filters=[item.i_item_sk IN ([Int64(2), Int64(3), Int64(5), Int64(7), Int64(11), Int64(13), Int64(17), Int64(19), Int64(23), Int64(29)])] +physical_plan +01)SortPreservingMergeExec: [ca_zip@0 ASC NULLS LAST, ca_city@1 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[ca_zip@0 ASC NULLS LAST, ca_city@1 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip, ca_city@1 as ca_city], aggr=[sum(web_sales.ws_sales_price)] +04)------RepartitionExec: partitioning=Hash([ca_zip@0, ca_city@1], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[ca_zip@2 as ca_zip, ca_city@1 as ca_city], aggr=[sum(web_sales.ws_sales_price)] +06)----------FilterExec: substr(ca_zip@2, 1, 5) IN (SET) ([85669, 86197, 88274, 83405, 86475, 85392, 85460, 80348, 81792]) OR mark@3, projection=[ws_sales_price@0, ca_city@1, ca_zip@2] +07)------------HashJoinExec: mode=CollectLeft, join_type=RightMark, on=[(i_item_id@0, i_item_id@3)], projection=[ws_sales_price@0, ca_city@1, ca_zip@2, mark@4] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_item_sk@0 IN (SET) ([2, 3, 5, 7, 11, 13, 17, 19, 23, 29]) +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@0)], projection=[ws_sales_price@3, ca_city@4, ca_zip@5, i_item_id@1] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_sales_price@3, ca_city@4, ca_zip@5] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_qoy@10 = 2 AND d_year@6 = 2001 +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@3)], projection=[ws_sold_date_sk@3, ws_item_sk@4, ws_sales_price@5, ca_city@1, ca_zip@2] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city, ca_zip], file_type=vortex +15)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@2)], projection=[ws_sold_date_sk@2, ws_item_sk@3, ws_sales_price@5, c_current_addr_sk@1] +16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +17)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no new file mode 100644 index 00000000000..60e23576da0 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no @@ -0,0 +1,103 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_last_name, + c_first_name, + ca_city, + bought_city, + ss_ticket_number, + amt, + profit +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + ca_city bought_city, + sum(ss_coupon_amt) amt, + sum(ss_net_profit) profit + FROM store_sales, + date_dim, + store, + household_demographics, + customer_address + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND store_sales.ss_addr_sk = customer_address.ca_address_sk + AND (household_demographics.hd_dep_count = 4 + OR household_demographics.hd_vehicle_count= 3) + AND date_dim.d_dow IN (6, + 0) + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_city IN ('Fairview', + 'Midway') + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + ca_city) dn, + customer, + customer_address current_addr +WHERE ss_customer_sk = c_customer_sk + AND customer.c_current_addr_sk = current_addr.ca_address_sk + AND current_addr.ca_city <> bought_city +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + ca_city NULLS FIRST, + bought_city NULLS FIRST, + ss_ticket_number NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_last_name ASC NULLS FIRST, customer.c_first_name ASC NULLS FIRST, current_addr.ca_city ASC NULLS FIRST, dn.bought_city ASC NULLS FIRST, dn.ss_ticket_number ASC NULLS FIRST, fetch=100 +02)--Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.amt, dn.profit +03)----Inner Join: customer.c_current_addr_sk = current_addr.ca_address_sk Filter: dn.bought_city != current_addr.ca_city +04)------Projection: dn.ss_ticket_number, dn.bought_city, dn.amt, dn.profit, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name +05)--------Inner Join: dn.ss_customer_sk = customer.c_customer_sk +06)----------SubqueryAlias: dn +07)------------Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit +08)--------------Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] +09)----------------Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, customer_address.ca_city +10)------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +11)--------------------Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit +12)----------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +13)------------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit +14)--------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +15)----------------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit +16)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +17)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] +18)--------------------------------Projection: date_dim.d_date_sk +19)----------------------------------Filter: (date_dim.d_dow = Int64(6) OR date_dim.d_dow = Int64(0)) AND (date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)) +20)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_dow], partial_filters=[date_dim.d_dow = Int64(6) OR date_dim.d_dow = Int64(0), date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +21)----------------------------Projection: store.s_store_sk +22)------------------------------Filter: store.s_city = Utf8View("Fairview") OR store.s_city = Utf8View("Midway") +23)--------------------------------TableScan: store projection=[s_store_sk, s_city], partial_filters=[store.s_city = Utf8View("Fairview") OR store.s_city = Utf8View("Midway")] +24)------------------------Projection: household_demographics.hd_demo_sk +25)--------------------------Filter: household_demographics.hd_dep_count = Int64(4) OR household_demographics.hd_vehicle_count = Int32(3) +26)----------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) OR household_demographics.hd_vehicle_count = Int32(3)] +27)--------------------TableScan: customer_address projection=[ca_address_sk, ca_city] +28)----------TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] +29)------SubqueryAlias: current_addr +30)--------TableScan: customer_address projection=[ca_address_sk, ca_city] +physical_plan +01)SortPreservingMergeExec: [c_last_name@0 ASC, c_first_name@1 ASC, ca_city@2 ASC, bought_city@3 ASC, ss_ticket_number@4 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC, c_first_name@1 ASC, ca_city@2 ASC, bought_city@3 ASC, ss_ticket_number@4 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@4)], filter=bought_city@0 != ca_city@1, projection=[c_last_name@8, c_first_name@7, ca_city@1, bought_city@3, ss_ticket_number@2, amt@4, profit@5] +04)------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city], file_type=vortex +05)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_ticket_number@4, bought_city@6, amt@7, profit@8, c_current_addr_sk@1, c_first_name@2, c_last_name@3] +06)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name], file_type=vortex +07)--------ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ca_city@3 as bought_city, sum(store_sales.ss_coupon_amt)@4 as amt, sum(store_sales.ss_net_profit)@5 as profit] +08)----------AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, ca_city@3 as ca_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] +09)------------RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, ca_city@3], 4), input_partitions=4 +10)--------------AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, ca_city@5 as ca_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_customer_sk@2, ss_addr_sk@3, ss_ticket_number@4, ss_coupon_amt@5, ss_net_profit@6, ca_city@1] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city], file_type=vortex +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_customer_sk@1, ss_addr_sk@3, ss_ticket_number@4, ss_coupon_amt@5, ss_net_profit@6] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 OR hd_vehicle_count@4 = 3 +15)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_ticket_number@5, ss_coupon_amt@6, ss_net_profit@7] +16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_city@22 = Fairview OR s_city@22 = Midway +17)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_store_sk@5, ss_ticket_number@6, ss_coupon_amt@7, ss_net_profit@8] +18)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: (d_dow@7 = 6 OR d_dow@7 = 0) AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001) +19)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no new file mode 100644 index 00000000000..9fc889c7418 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no @@ -0,0 +1,190 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH v1 AS + (SELECT i_category, + i_brand, + s_store_name, + s_company_name, + d_year, + d_moy, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, + i_brand, + s_store_name, + s_company_name, + d_year) avg_monthly_sales, + rank() OVER (PARTITION BY i_category, + i_brand, + s_store_name, + s_company_name + ORDER BY d_year, + d_moy) rn + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND (d_year = 1999 + OR (d_year = 1999-1 + AND d_moy =12) + OR (d_year = 1999+1 + AND d_moy =1)) + GROUP BY i_category, + i_brand, + s_store_name, + s_company_name, + d_year, + d_moy), + v2 AS + (SELECT v1.i_category, + v1.i_brand, + v1.s_store_name, + v1.s_company_name, + v1.d_year, + v1.d_moy, + v1.avg_monthly_sales, + v1.sum_sales, + v1_lag.sum_sales psum, + v1_lead.sum_sales nsum + FROM v1, + v1 v1_lag, + v1 v1_lead + WHERE v1.i_category = v1_lag.i_category + AND v1.i_category = v1_lead.i_category + AND v1.i_brand = v1_lag.i_brand + AND v1.i_brand = v1_lead.i_brand + AND v1.s_store_name = v1_lag.s_store_name + AND v1.s_store_name = v1_lead.s_store_name + AND v1.s_company_name = v1_lag.s_company_name + AND v1.s_company_name = v1_lead.s_company_name + AND v1.rn = v1_lag.rn + 1 + AND v1.rn = v1_lead.rn - 1) +SELECT * +FROM v2 +WHERE d_year = 1999 + AND avg_monthly_sales > 0 + AND CASE + WHEN avg_monthly_sales > 0 THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 +LIMIT 100; +---- +logical_plan +01)Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS LAST, v2.i_category ASC NULLS LAST, v2.i_brand ASC NULLS LAST, v2.s_store_name ASC NULLS LAST, v2.s_company_name ASC NULLS LAST, v2.d_year ASC NULLS LAST, v2.d_moy ASC NULLS LAST, v2.psum ASC NULLS LAST, v2.nsum ASC NULLS LAST, fetch=100 +02)--SubqueryAlias: v2 +03)----Projection: v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.d_moy, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum +04)------Inner Join: v1.i_category = v1_lead.i_category, v1.i_brand = v1_lead.i_brand, v1.s_store_name = v1_lead.s_store_name, v1.s_company_name = v1_lead.s_company_name, CAST(v1.rn AS Decimal128(21, 0)) = CAST(v1_lead.rn AS Decimal128(20, 0)) - Decimal128(1,20,0) +05)--------Projection: v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.d_moy, v1.sum_sales, v1.avg_monthly_sales, v1.rn, v1_lag.sum_sales +06)----------Inner Join: v1.i_category = v1_lag.i_category, v1.i_brand = v1_lag.i_brand, v1.s_store_name = v1_lag.s_store_name, v1.s_company_name = v1_lag.s_company_name, CAST(v1.rn AS Decimal128(21, 0)) = CAST(v1_lag.rn AS Decimal128(20, 0)) + Decimal128(1,20,0) +07)------------SubqueryAlias: v1 +08)--------------Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +09)----------------Filter: __common_expr_3 AND CASE WHEN __common_expr_3 THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(NULL,32,10) END > Decimal128(0.1000000000,32,10) +10)------------------Projection: avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(0.000000,21,6) AS __common_expr_3, item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy, sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +11)--------------------WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +12)----------------------Filter: date_dim.d_year = Int64(1999) +13)------------------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +14)--------------------------Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] +15)----------------------------Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name +16)------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +17)--------------------------------Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy +18)----------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +19)------------------------------------Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +20)--------------------------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +21)----------------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +22)----------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +23)------------------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +24)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +25)--------------------------------TableScan: store projection=[s_store_sk, s_store_name, s_company_name] +26)------------SubqueryAlias: v1_lag +27)--------------SubqueryAlias: v1 +28)----------------Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +29)------------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +30)--------------------Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] +31)----------------------Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name +32)------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +33)--------------------------Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy +34)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +35)------------------------------Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +36)--------------------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +37)----------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +38)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +39)------------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +40)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +41)--------------------------TableScan: store projection=[s_store_sk, s_store_name, s_company_name] +42)--------SubqueryAlias: v1_lead +43)----------SubqueryAlias: v1 +44)------------Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +45)--------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +46)----------------Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] +47)------------------Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name +48)--------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +49)----------------------Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy +50)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +51)--------------------------Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +52)----------------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +53)------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +54)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +55)--------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +56)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +57)----------------------TableScan: store projection=[s_store_sk, s_store_name, s_company_name] +physical_plan +01)SortPreservingMergeExec: [sum_sales@7 - avg_monthly_sales@6 ASC NULLS LAST, i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST, psum@8 ASC NULLS LAST, nsum@9 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[sum_sales@7 - avg_monthly_sales@6 ASC NULLS LAST, i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_moy@5 ASC NULLS LAST, psum@8 ASC NULLS LAST, nsum@9 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy, avg_monthly_sales@6 as avg_monthly_sales, sum_sales@7 as sum_sales, sum_sales@8 as psum, sum_sales@9 as nsum] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (s_store_name@2, s_store_name@2), (s_company_name@3, s_company_name@3), (CAST(v1.rn AS Decimal128(21, 0))@10, v1_lead.rn - Decimal128(1,20,0)@6)], projection=[i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5, avg_monthly_sales@7, sum_sales@6, sum_sales@9, sum_sales@15] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy, sum_sales@6 as sum_sales, avg_monthly_sales@7 as avg_monthly_sales, rn@8 as rn, sum_sales@9 as sum_sales, CAST(rn@8 AS Decimal128(21, 0)) as CAST(v1.rn AS Decimal128(21, 0))] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (s_store_name@2, s_store_name@2), (s_company_name@3, s_company_name@3), (CAST(v1.rn AS Decimal128(21, 0))@9, v1_lag.rn + Decimal128(1,20,0)@6)], projection=[i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5, sum_sales@6, avg_monthly_sales@7, rn@8, sum_sales@14] +08)--------------CoalescePartitionsExec +09)----------------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy, sum(store_sales.ss_sales_price)@6 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@8 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@8 AS Decimal128(21, 0)) as CAST(v1.rn AS Decimal128(21, 0))] +10)------------------FilterExec: __common_expr_3@0 AND CASE WHEN __common_expr_3@0 THEN abs(sum(store_sales.ss_sales_price)@7 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@9) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@9 END > 0.1000000000, projection=[i_category@1, i_brand@2, s_store_name@3, s_company_name@4, d_year@5, d_moy@6, sum(store_sales.ss_sales_price)@7, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@9, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@8] +11)--------------------ProjectionExec: expr=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8 > 0.000000 as __common_expr_3, i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy, sum(store_sales.ss_sales_price)@6 as sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8 as avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING] +12)----------------------WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +13)------------------------FilterExec: d_year@4 = 1999 +14)--------------------------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +15)----------------------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] +16)------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 4), input_partitions=4 +17)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +18)----------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 4), input_partitions=4 +19)------------------------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +20)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[i_brand@3, i_category@4, ss_sales_price@6, d_year@7, d_moy@8, s_store_name@1, s_company_name@2] +21)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_company_name], file_type=vortex +22)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@2)], projection=[i_brand@3, i_category@4, ss_store_sk@6, ss_sales_price@7, d_year@1, d_moy@2] +23)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +24)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] +25)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +26)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex +27)--------------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, sum(store_sales.ss_sales_price)@6 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 AS Decimal128(20, 0)) + 1 as v1_lag.rn + Decimal128(1,20,0)] +28)----------------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +29)------------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] +30)--------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 4), input_partitions=4 +31)----------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +32)------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 4), input_partitions=4 +33)--------------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +34)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[i_brand@3, i_category@4, ss_sales_price@6, d_year@7, d_moy@8, s_store_name@1, s_company_name@2] +35)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_company_name], file_type=vortex +36)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@2)], projection=[i_brand@3, i_category@4, ss_store_sk@6, ss_sales_price@7, d_year@1, d_moy@2] +37)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +38)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] +39)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +40)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex +41)--------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, sum(store_sales.ss_sales_price)@6 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 AS Decimal128(20, 0)) - 1 as v1_lead.rn - Decimal128(1,20,0)] +42)----------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +43)------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] +44)--------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 4), input_partitions=4 +45)----------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +46)------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 4), input_partitions=4 +47)--------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +48)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[i_brand@3, i_category@4, ss_sales_price@6, d_year@7, d_moy@8, s_store_name@1, s_company_name@2] +49)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_company_name], file_type=vortex +50)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@2)], projection=[i_brand@3, i_category@4, ss_store_sk@6, ss_sales_price@7, d_year@1, d_moy@2] +51)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +52)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] +53)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +54)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q48.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q48.slt.no new file mode 100644 index 00000000000..744a76972ce --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q48.slt.no @@ -0,0 +1,79 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT SUM (ss_quantity) +FROM store_sales, + store, + customer_demographics, + customer_address, + date_dim +WHERE s_store_sk = ss_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2000 + AND ((cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'M' + AND cd_education_status = '4 yr Degree' + AND ss_sales_price BETWEEN 100.00 AND 150.00) + OR (cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'D' + AND cd_education_status = '2 yr Degree' + AND ss_sales_price BETWEEN 50.00 AND 100.00) + OR (cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND ss_sales_price BETWEEN 150.00 AND 200.00)) + AND ((ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('CO', + 'OH', + 'TX') + AND ss_net_profit BETWEEN 0 AND 2000) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('OR', + 'MN', + 'KY') + AND ss_net_profit BETWEEN 150 AND 3000) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('VA', + 'CA', + 'MS') + AND ss_net_profit BETWEEN 50 AND 25000)) ; +---- +logical_plan +01)Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_quantity)]] +02)--Projection: store_sales.ss_quantity +03)----Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +04)------Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity +05)--------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = Utf8View("CO") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("TX")) AND store_sales.ss_net_profit >= Decimal128(0.00,7,2) AND store_sales.ss_net_profit <= Decimal128(2000.00,7,2) OR (customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("MN") OR customer_address.ca_state = Utf8View("KY")) AND store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(3000.00,7,2) OR (customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("CA") OR customer_address.ca_state = Utf8View("MS")) AND store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(25000.00,7,2) +06)----------Projection: store_sales.ss_sold_date_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_net_profit +07)------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("4 yr Degree") AND store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR customer_demographics.cd_marital_status = Utf8View("D") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") AND store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2) +08)--------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_cdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_net_profit +09)----------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +10)------------------Filter: (store_sales.ss_net_profit >= Decimal128(0.00,7,2) AND store_sales.ss_net_profit <= Decimal128(2000.00,7,2) OR store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(3000.00,7,2) OR store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(25000.00,7,2)) AND (store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2)) +11)--------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_net_profit], partial_filters=[store_sales.ss_net_profit >= Decimal128(0.00,7,2) AND store_sales.ss_net_profit <= Decimal128(2000.00,7,2) OR store_sales.ss_net_profit >= Decimal128(150.00,7,2) AND store_sales.ss_net_profit <= Decimal128(3000.00,7,2) OR store_sales.ss_net_profit >= Decimal128(50.00,7,2) AND store_sales.ss_net_profit <= Decimal128(25000.00,7,2), store_sales.ss_sales_price >= Decimal128(100.00,7,2) AND store_sales.ss_sales_price <= Decimal128(150.00,7,2) OR store_sales.ss_sales_price >= Decimal128(50.00,7,2) AND store_sales.ss_sales_price <= Decimal128(100.00,7,2) OR store_sales.ss_sales_price >= Decimal128(150.00,7,2) AND store_sales.ss_sales_price <= Decimal128(200.00,7,2)] +12)------------------TableScan: store projection=[s_store_sk] +13)--------------Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("4 yr Degree") OR customer_demographics.cd_marital_status = Utf8View("D") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +14)----------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("4 yr Degree") OR customer_demographics.cd_marital_status = Utf8View("D") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College")] +15)----------Projection: customer_address.ca_address_sk, customer_address.ca_state +16)------------Filter: customer_address.ca_country = Utf8View("United States") AND customer_address.ca_state IN ([Utf8View("CO"), Utf8View("OH"), Utf8View("TX"), Utf8View("OR"), Utf8View("MN"), Utf8View("KY"), Utf8View("VA"), Utf8View("CA"), Utf8View("MS")]) AND (customer_address.ca_state = Utf8View("CO") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("MN") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("CA") OR customer_address.ca_state = Utf8View("MS")) +17)--------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], partial_filters=[customer_address.ca_country = Utf8View("United States"), customer_address.ca_state IN ([Utf8View("CO"), Utf8View("OH"), Utf8View("TX"), Utf8View("OR"), Utf8View("MN"), Utf8View("KY"), Utf8View("VA"), Utf8View("CA"), Utf8View("MS")]), customer_address.ca_state = Utf8View("CO") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("TX") OR customer_address.ca_state = Utf8View("OR") OR customer_address.ca_state = Utf8View("MN") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("VA") OR customer_address.ca_state = Utf8View("CA") OR customer_address.ca_state = Utf8View("MS")] +18)------Projection: date_dim.d_date_sk +19)--------Filter: date_dim.d_year = Int64(2000) +20)----------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +physical_plan +01)AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_quantity)] +02)--CoalescePartitionsExec +03)----AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_quantity)] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_quantity@2] +05)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +06)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], filter=(ca_state@1 = CO OR ca_state@1 = OH OR ca_state@1 = TX) AND ss_net_profit@0 >= 0.00 AND ss_net_profit@0 <= 2000.00 OR (ca_state@1 = OR OR ca_state@1 = MN OR ca_state@1 = KY) AND ss_net_profit@0 >= 150.00 AND ss_net_profit@0 <= 3000.00 OR (ca_state@1 = VA OR ca_state@1 = CA OR ca_state@1 = MS) AND ss_net_profit@0 >= 50.00 AND ss_net_profit@0 <= 25000.00, projection=[ss_sold_date_sk@2, ss_quantity@4] +07)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, predicate: ca_country@10 = United States AND ca_state@8 IN (SET) ([CO, OH, TX, OR, MN, KY, VA, CA, MS]) AND (ca_state@8 = CO OR ca_state@8 = OH OR ca_state@8 = TX OR ca_state@8 = OR OR ca_state@8 = MN OR ca_state@8 = KY OR ca_state@8 = VA OR ca_state@8 = CA OR ca_state@8 = MS) +08)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@1)], filter=cd_marital_status@1 = M AND cd_education_status@2 = 4 yr Degree AND ss_sales_price@0 >= 100.00 AND ss_sales_price@0 <= 150.00 OR cd_marital_status@1 = D AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= 50.00 AND ss_sales_price@0 <= 100.00 OR cd_marital_status@1 = S AND cd_education_status@2 = College AND ss_sales_price@0 >= 150.00 AND ss_sales_price@0 <= 200.00, projection=[ss_sold_date_sk@3, ss_addr_sk@5, ss_quantity@6, ss_net_profit@8] +09)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex, predicate: cd_marital_status@2 = M AND cd_education_status@3 = 4 yr Degree OR cd_marital_status@2 = D AND cd_education_status@3 = 2 yr Degree OR cd_marital_status@2 = S AND cd_education_status@3 = College +10)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_sold_date_sk@1, ss_cdemo_sk@2, ss_addr_sk@3, ss_quantity@5, ss_sales_price@6, ss_net_profit@7] +11)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +12)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_cdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_net_profit], file_type=vortex, predicate: (ss_net_profit@22 >= 0.00 AND ss_net_profit@22 <= 2000.00 OR ss_net_profit@22 >= 150.00 AND ss_net_profit@22 <= 3000.00 OR ss_net_profit@22 >= 50.00 AND ss_net_profit@22 <= 25000.00) AND (ss_sales_price@13 >= 100.00 AND ss_sales_price@13 <= 150.00 OR ss_sales_price@13 >= 50.00 AND ss_sales_price@13 <= 100.00 OR ss_sales_price@13 >= 150.00 AND ss_sales_price@13 <= 200.00) diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no new file mode 100644 index 00000000000..48f1c4ec0cd --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no @@ -0,0 +1,249 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT channel, + item, + return_ratio, + return_rank, + currency_rank +FROM + (SELECT 'web' AS channel, + web.item, + web.return_ratio, + web.return_rank, + web.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT ws.ws_item_sk AS item, + (cast(sum(coalesce(wr.wr_return_quantity,0)) AS decimal(15,4))/ cast(sum(coalesce(ws.ws_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(wr.wr_return_amt,0)) AS decimal(15,4))/ cast(sum(coalesce(ws.ws_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM web_sales ws + LEFT OUTER JOIN web_returns wr ON (ws.ws_order_number = wr.wr_order_number + AND ws.ws_item_sk = wr.wr_item_sk) ,date_dim + WHERE wr.wr_return_amt > 10000 + AND ws.ws_net_profit > 1 + AND ws.ws_net_paid > 0 + AND ws.ws_quantity > 0 + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY ws.ws_item_sk) in_web) web + WHERE (web.return_rank <= 10 + OR web.currency_rank <= 10) + UNION SELECT 'catalog' AS channel, + catalog.item, + catalog.return_ratio, + catalog.return_rank, + catalog.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT cs.cs_item_sk AS item, + (cast(sum(coalesce(cr.cr_return_quantity,0)) AS decimal(15,4))/ cast(sum(coalesce(cs.cs_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(cr.cr_return_amount,0)) AS decimal(15,4))/ cast(sum(coalesce(cs.cs_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM catalog_sales cs + LEFT OUTER JOIN catalog_returns cr ON (cs.cs_order_number = cr.cr_order_number + AND cs.cs_item_sk = cr.cr_item_sk) ,date_dim + WHERE cr.cr_return_amount > 10000 + AND cs.cs_net_profit > 1 + AND cs.cs_net_paid > 0 + AND cs.cs_quantity > 0 + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY cs.cs_item_sk) in_cat) CATALOG + WHERE (catalog.return_rank <= 10 + OR catalog.currency_rank <=10) + UNION SELECT 'store' AS channel, + store.item, + store.return_ratio, + store.return_rank, + store.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT sts.ss_item_sk AS item, + (cast(sum(coalesce(sr.sr_return_quantity,0)) AS decimal(15,4))/cast(sum(coalesce(sts.ss_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(sr.sr_return_amt,0)) AS decimal(15,4))/cast(sum(coalesce(sts.ss_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM store_sales sts + LEFT OUTER JOIN store_returns sr ON (sts.ss_ticket_number = sr.sr_ticket_number + AND sts.ss_item_sk = sr.sr_item_sk) ,date_dim + WHERE sr.sr_return_amt > 10000 + AND sts.ss_net_profit > 1 + AND sts.ss_net_paid > 0 + AND sts.ss_quantity > 0 + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY sts.ss_item_sk) in_store) store + WHERE (store.return_rank <= 10 + OR store.currency_rank <= 10) ) sq1 +ORDER BY 1 NULLS FIRST, + 4 NULLS FIRST, + 5 NULLS FIRST, + 2 NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sq1.channel ASC NULLS FIRST, sq1.return_rank ASC NULLS FIRST, sq1.currency_rank ASC NULLS FIRST, sq1.item ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: sq1 +03)----Aggregate: groupBy=[[channel, item, return_ratio, return_rank, currency_rank]], aggr=[[]] +04)------Union +05)--------Projection: Utf8("web") AS channel, web.item, web.return_ratio, web.return_rank, web.currency_rank +06)----------SubqueryAlias: web +07)------------Projection: in_web.item, in_web.return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank +08)--------------Filter: rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) +09)----------------Projection: in_web.item, in_web.return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +10)------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +11)--------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +12)----------------------SubqueryAlias: in_web +13)------------------------Projection: ws.ws_item_sk AS item, CAST(sum(coalesce(wr.wr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(wr.wr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio +14)--------------------------Aggregate: groupBy=[[ws.ws_item_sk]], aggr=[[sum(CASE WHEN wr.wr_return_quantity IS NOT NULL THEN wr.wr_return_quantity ELSE Int64(0) END) AS sum(coalesce(wr.wr_return_quantity,Int64(0))), sum(CASE WHEN ws.ws_quantity IS NOT NULL THEN ws.ws_quantity ELSE Int64(0) END) AS sum(coalesce(ws.ws_quantity,Int64(0))), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(wr.wr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(ws.ws_net_paid,Int64(0)))]] +15)----------------------------Projection: CAST(wr.wr_return_amt AS Decimal128(22, 2)) AS __common_expr_1, CAST(ws.ws_net_paid AS Decimal128(22, 2)) AS __common_expr_2, ws.ws_item_sk, ws.ws_quantity, wr.wr_return_quantity +16)------------------------------Inner Join: ws.ws_sold_date_sk = date_dim.d_date_sk +17)--------------------------------Projection: ws.ws_sold_date_sk, ws.ws_item_sk, ws.ws_quantity, ws.ws_net_paid, wr.wr_return_quantity, wr.wr_return_amt +18)----------------------------------Inner Join: ws.ws_order_number = wr.wr_order_number, ws.ws_item_sk = wr.wr_item_sk +19)------------------------------------SubqueryAlias: ws +20)--------------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_net_paid +21)----------------------------------------Filter: web_sales.ws_net_profit > Decimal128(1.00,7,2) AND web_sales.ws_net_paid > Decimal128(0.00,7,2) AND web_sales.ws_quantity > Int64(0) +22)------------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_net_paid, ws_net_profit], partial_filters=[web_sales.ws_net_profit > Decimal128(1.00,7,2), web_sales.ws_net_paid > Decimal128(0.00,7,2), web_sales.ws_quantity > Int64(0)] +23)------------------------------------SubqueryAlias: wr +24)--------------------------------------Filter: web_returns.wr_return_amt > Decimal128(10000.00,7,2) +25)----------------------------------------TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt], partial_filters=[web_returns.wr_return_amt > Decimal128(10000.00,7,2)] +26)--------------------------------Projection: date_dim.d_date_sk +27)----------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(12) +28)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(12)] +29)--------Projection: Utf8("catalog") AS channel, catalog.item, catalog.return_ratio, catalog.return_rank, catalog.currency_rank +30)----------SubqueryAlias: catalog +31)------------Projection: in_cat.item, in_cat.return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank +32)--------------Filter: rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) +33)----------------Projection: in_cat.item, in_cat.return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +34)------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +35)--------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +36)----------------------SubqueryAlias: in_cat +37)------------------------Projection: cs.cs_item_sk AS item, CAST(sum(coalesce(cr.cr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(cr.cr_return_amount,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio +38)--------------------------Aggregate: groupBy=[[cs.cs_item_sk]], aggr=[[sum(CASE WHEN cr.cr_return_quantity IS NOT NULL THEN cr.cr_return_quantity ELSE Int64(0) END) AS sum(coalesce(cr.cr_return_quantity,Int64(0))), sum(CASE WHEN cs.cs_quantity IS NOT NULL THEN cs.cs_quantity ELSE Int64(0) END) AS sum(coalesce(cs.cs_quantity,Int64(0))), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(cr.cr_return_amount,Int64(0))), sum(CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(cs.cs_net_paid,Int64(0)))]] +39)----------------------------Projection: CAST(cr.cr_return_amount AS Decimal128(22, 2)) AS __common_expr_3, CAST(cs.cs_net_paid AS Decimal128(22, 2)) AS __common_expr_4, cs.cs_item_sk, cs.cs_quantity, cr.cr_return_quantity +40)------------------------------Inner Join: cs.cs_sold_date_sk = date_dim.d_date_sk +41)--------------------------------Projection: cs.cs_sold_date_sk, cs.cs_item_sk, cs.cs_quantity, cs.cs_net_paid, cr.cr_return_quantity, cr.cr_return_amount +42)----------------------------------Inner Join: cs.cs_order_number = cr.cr_order_number, cs.cs_item_sk = cr.cr_item_sk +43)------------------------------------SubqueryAlias: cs +44)--------------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_net_paid +45)----------------------------------------Filter: catalog_sales.cs_net_profit > Decimal128(1.00,7,2) AND catalog_sales.cs_net_paid > Decimal128(0.00,7,2) AND catalog_sales.cs_quantity > Int64(0) +46)------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_net_paid, cs_net_profit], partial_filters=[catalog_sales.cs_net_profit > Decimal128(1.00,7,2), catalog_sales.cs_net_paid > Decimal128(0.00,7,2), catalog_sales.cs_quantity > Int64(0)] +47)------------------------------------SubqueryAlias: cr +48)--------------------------------------Filter: catalog_returns.cr_return_amount > Decimal128(10000.00,7,2) +49)----------------------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount], partial_filters=[catalog_returns.cr_return_amount > Decimal128(10000.00,7,2)] +50)--------------------------------Projection: date_dim.d_date_sk +51)----------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(12) +52)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(12)] +53)--------Projection: Utf8("store") AS channel, store.item, store.return_ratio, store.return_rank, store.currency_rank +54)----------SubqueryAlias: store +55)------------Projection: in_store.item, in_store.return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank +56)--------------Filter: rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) +57)----------------Projection: in_store.item, in_store.return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +58)------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +59)--------------------WindowAggr: windowExpr=[[rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +60)----------------------SubqueryAlias: in_store +61)------------------------Projection: sts.ss_item_sk AS item, CAST(sum(coalesce(sr.sr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(sr.sr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio +62)--------------------------Aggregate: groupBy=[[sts.ss_item_sk]], aggr=[[sum(CASE WHEN sr.sr_return_quantity IS NOT NULL THEN sr.sr_return_quantity ELSE Int64(0) END) AS sum(coalesce(sr.sr_return_quantity,Int64(0))), sum(CASE WHEN sts.ss_quantity IS NOT NULL THEN sts.ss_quantity ELSE Int64(0) END) AS sum(coalesce(sts.ss_quantity,Int64(0))), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(sr.sr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(sts.ss_net_paid,Int64(0)))]] +63)----------------------------Projection: CAST(sr.sr_return_amt AS Decimal128(22, 2)) AS __common_expr_5, CAST(sts.ss_net_paid AS Decimal128(22, 2)) AS __common_expr_6, sts.ss_item_sk, sts.ss_quantity, sr.sr_return_quantity +64)------------------------------Inner Join: sts.ss_sold_date_sk = date_dim.d_date_sk +65)--------------------------------Projection: sts.ss_sold_date_sk, sts.ss_item_sk, sts.ss_quantity, sts.ss_net_paid, sr.sr_return_quantity, sr.sr_return_amt +66)----------------------------------Inner Join: sts.ss_ticket_number = sr.sr_ticket_number, sts.ss_item_sk = sr.sr_item_sk +67)------------------------------------SubqueryAlias: sts +68)--------------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_net_paid +69)----------------------------------------Filter: store_sales.ss_net_profit > Decimal128(1.00,7,2) AND store_sales.ss_net_paid > Decimal128(0.00,7,2) AND store_sales.ss_quantity > Int64(0) +70)------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_net_paid, ss_net_profit], partial_filters=[store_sales.ss_net_profit > Decimal128(1.00,7,2), store_sales.ss_net_paid > Decimal128(0.00,7,2), store_sales.ss_quantity > Int64(0)] +71)------------------------------------SubqueryAlias: sr +72)--------------------------------------Filter: store_returns.sr_return_amt > Decimal128(10000.00,7,2) +73)----------------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt], partial_filters=[store_returns.sr_return_amt > Decimal128(10000.00,7,2)] +74)--------------------------------Projection: date_dim.d_date_sk +75)----------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(12) +76)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(12)] +physical_plan +01)SortPreservingMergeExec: [channel@0 ASC, return_rank@3 ASC, currency_rank@4 ASC, item@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[channel@0 ASC, return_rank@3 ASC, currency_rank@4 ASC, item@1 ASC], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, item@1 as item, return_ratio@2 as return_ratio, return_rank@3 as return_rank, currency_rank@4 as currency_rank], aggr=[] +04)------RepartitionExec: partitioning=Hash([channel@0, item@1, return_ratio@2, return_rank@3, currency_rank@4], 4), input_partitions=12 +05)--------AggregateExec: mode=Partial, gby=[channel@0 as channel, item@1 as item, return_ratio@2 as return_ratio, return_rank@3 as return_rank, currency_rank@4 as currency_rank], aggr=[], ordering_mode=PartiallySorted([0, 4]) +06)----------UnionExec +07)------------ProjectionExec: expr=[web as channel, item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] +08)--------------FilterExec: rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 +09)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true +10)------------------ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +11)--------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +12)----------------------SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] +13)------------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +14)--------------------------SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] +15)----------------------------SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] +16)------------------------------ProjectionExec: expr=[ws_item_sk@0 as item, CAST(sum(coalesce(wr.wr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(wr.wr_return_amt,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] +17)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk], aggr=[sum(CASE WHEN wr.wr_return_quantity IS NOT NULL THEN wr.wr_return_quantity ELSE 0 END) as sum(coalesce(wr.wr_return_quantity,Int64(0))), sum(CASE WHEN ws.ws_quantity IS NOT NULL THEN ws.ws_quantity ELSE 0 END) as sum(coalesce(ws.ws_quantity,Int64(0))), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(wr.wr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE 0.00 END) as sum(coalesce(ws.ws_net_paid,Int64(0)))] +18)----------------------------------RepartitionExec: partitioning=Hash([ws_item_sk@0], 4), input_partitions=4 +19)------------------------------------AggregateExec: mode=Partial, gby=[ws_item_sk@2 as ws_item_sk], aggr=[sum(CASE WHEN wr.wr_return_quantity IS NOT NULL THEN wr.wr_return_quantity ELSE 0 END) as sum(coalesce(wr.wr_return_quantity,Int64(0))), sum(CASE WHEN ws.ws_quantity IS NOT NULL THEN ws.ws_quantity ELSE 0 END) as sum(coalesce(ws.ws_quantity,Int64(0))), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(wr.wr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE 0.00 END) as sum(coalesce(ws.ws_net_paid,Int64(0)))] +20)--------------------------------------ProjectionExec: expr=[CAST(wr_return_amt@0 AS Decimal128(22, 2)) as __common_expr_1, CAST(ws_net_paid@1 AS Decimal128(22, 2)) as __common_expr_2, ws_item_sk@2 as ws_item_sk, ws_quantity@3 as ws_quantity, wr_return_quantity@4 as wr_return_quantity] +21)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[wr_return_amt@6, ws_net_paid@4, ws_item_sk@2, ws_quantity@3, wr_return_quantity@5] +22)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 12 +23)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_order_number@1, ws_order_number@2), (wr_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@4, ws_item_sk@5, ws_quantity@7, ws_net_paid@8, wr_return_quantity@2, wr_return_amt@3] +24)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt], file_type=vortex, predicate: wr_return_amt@15 > 10000.00 +25)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_net_paid], file_type=vortex, predicate: ws_net_profit@33 > 1.00 AND ws_net_paid@29 > 0.00 AND ws_quantity@18 > 0 +26)------------ProjectionExec: expr=[catalog as channel, item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] +27)--------------FilterExec: rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 +28)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true +29)------------------ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +30)--------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +31)----------------------SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] +32)------------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +33)--------------------------SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] +34)----------------------------SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] +35)------------------------------ProjectionExec: expr=[cs_item_sk@0 as item, CAST(sum(coalesce(cr.cr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(cr.cr_return_amount,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] +36)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(CASE WHEN cr.cr_return_quantity IS NOT NULL THEN cr.cr_return_quantity ELSE 0 END) as sum(coalesce(cr.cr_return_quantity,Int64(0))), sum(CASE WHEN cs.cs_quantity IS NOT NULL THEN cs.cs_quantity ELSE 0 END) as sum(coalesce(cs.cs_quantity,Int64(0))), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE 0.00 END) as sum(coalesce(cr.cr_return_amount,Int64(0))), sum(CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE 0.00 END) as sum(coalesce(cs.cs_net_paid,Int64(0)))] +37)----------------------------------RepartitionExec: partitioning=Hash([cs_item_sk@0], 4), input_partitions=4 +38)------------------------------------AggregateExec: mode=Partial, gby=[cs_item_sk@2 as cs_item_sk], aggr=[sum(CASE WHEN cr.cr_return_quantity IS NOT NULL THEN cr.cr_return_quantity ELSE 0 END) as sum(coalesce(cr.cr_return_quantity,Int64(0))), sum(CASE WHEN cs.cs_quantity IS NOT NULL THEN cs.cs_quantity ELSE 0 END) as sum(coalesce(cs.cs_quantity,Int64(0))), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE 0.00 END) as sum(coalesce(cr.cr_return_amount,Int64(0))), sum(CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE 0.00 END) as sum(coalesce(cs.cs_net_paid,Int64(0)))] +39)--------------------------------------ProjectionExec: expr=[CAST(cr_return_amount@0 AS Decimal128(22, 2)) as __common_expr_3, CAST(cs_net_paid@1 AS Decimal128(22, 2)) as __common_expr_4, cs_item_sk@2 as cs_item_sk, cs_quantity@3 as cs_quantity, cr_return_quantity@4 as cr_return_quantity] +40)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cr_return_amount@6, cs_net_paid@4, cs_item_sk@2, cs_quantity@3, cr_return_quantity@5] +41)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 12 +42)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_order_number@1, cs_order_number@2), (cr_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@4, cs_item_sk@5, cs_quantity@7, cs_net_paid@8, cr_return_quantity@2, cr_return_amount@3] +43)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount], file_type=vortex, predicate: cr_return_amount@18 > 10000.00 +44)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_net_paid], file_type=vortex, predicate: cs_net_profit@33 > 1.00 AND cs_net_paid@29 > 0.00 AND cs_quantity@18 > 0 +45)------------ProjectionExec: expr=[store as channel, item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] +46)--------------FilterExec: rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 +47)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1, maintains_sort_order=true +48)------------------ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +49)--------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +50)----------------------SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] +51)------------------------BoundedWindowAggExec: wdw=[rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +52)--------------------------SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] +53)----------------------------SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] +54)------------------------------ProjectionExec: expr=[ss_item_sk@0 as item, CAST(sum(coalesce(sr.sr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(sr.sr_return_amt,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] +55)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[sum(CASE WHEN sr.sr_return_quantity IS NOT NULL THEN sr.sr_return_quantity ELSE 0 END) as sum(coalesce(sr.sr_return_quantity,Int64(0))), sum(CASE WHEN sts.ss_quantity IS NOT NULL THEN sts.ss_quantity ELSE 0 END) as sum(coalesce(sts.ss_quantity,Int64(0))), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE 0.00 END) as sum(coalesce(sr.sr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE 0.00 END) as sum(coalesce(sts.ss_net_paid,Int64(0)))] +56)----------------------------------RepartitionExec: partitioning=Hash([ss_item_sk@0], 4), input_partitions=4 +57)------------------------------------AggregateExec: mode=Partial, gby=[ss_item_sk@2 as ss_item_sk], aggr=[sum(CASE WHEN sr.sr_return_quantity IS NOT NULL THEN sr.sr_return_quantity ELSE 0 END) as sum(coalesce(sr.sr_return_quantity,Int64(0))), sum(CASE WHEN sts.ss_quantity IS NOT NULL THEN sts.ss_quantity ELSE 0 END) as sum(coalesce(sts.ss_quantity,Int64(0))), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE 0.00 END) as sum(coalesce(sr.sr_return_amt,Int64(0))), sum(CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE 0.00 END) as sum(coalesce(sts.ss_net_paid,Int64(0)))] +58)--------------------------------------ProjectionExec: expr=[CAST(sr_return_amt@0 AS Decimal128(22, 2)) as __common_expr_5, CAST(ss_net_paid@1 AS Decimal128(22, 2)) as __common_expr_6, ss_item_sk@2 as ss_item_sk, ss_quantity@3 as ss_quantity, sr_return_quantity@4 as sr_return_quantity] +59)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[sr_return_amt@6, ss_net_paid@4, ss_item_sk@2, ss_quantity@3, sr_return_quantity@5] +60)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 12 +61)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_ticket_number@1, ss_ticket_number@2), (sr_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_quantity@7, ss_net_paid@8, sr_return_quantity@2, sr_return_amt@3] +62)--------------------------------------------CoalescePartitionsExec +63)----------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt], file_type=vortex, predicate: sr_return_amt@11 > 10000.00 +64)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_net_paid], file_type=vortex, predicate: ss_net_profit@22 > 1.00 AND ss_net_paid@20 > 0.00 AND ss_quantity@10 > 0 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no new file mode 100644 index 00000000000..54761234352 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no @@ -0,0 +1,228 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ssr AS + (SELECT s_store_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT ss_store_sk AS store_sk, + ss_sold_date_sk AS date_sk, + ss_ext_sales_price AS sales_price, + ss_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM store_sales + UNION ALL SELECT sr_store_sk AS store_sk, + sr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + sr_return_amt AS return_amt, + sr_net_loss AS net_loss + FROM store_returns ) salesreturns, + date_dim, + store + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND store_sk = s_store_sk + GROUP BY s_store_id) , + csr AS + (SELECT cp_catalog_page_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT cs_catalog_page_sk AS page_sk, + cs_sold_date_sk AS date_sk, + cs_ext_sales_price AS sales_price, + cs_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM catalog_sales + UNION ALL SELECT cr_catalog_page_sk AS page_sk, + cr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + cr_return_amount AS return_amt, + cr_net_loss AS net_loss + FROM catalog_returns ) salesreturns, + date_dim, + catalog_page + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND page_sk = cp_catalog_page_sk + GROUP BY cp_catalog_page_id) , + wsr AS + (SELECT web_site_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT ws_web_site_sk AS wsr_web_site_sk, + ws_sold_date_sk AS date_sk, + ws_ext_sales_price AS sales_price, + ws_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM web_sales + UNION ALL SELECT ws_web_site_sk AS wsr_web_site_sk, + wr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + wr_return_amt AS return_amt, + wr_net_loss AS net_loss + FROM web_returns + LEFT OUTER JOIN web_sales ON (wr_item_sk = ws_item_sk + AND wr_order_number = ws_order_number) ) salesreturns, + date_dim, + web_site + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND wsr_web_site_sk = web_site_sk + GROUP BY web_site_id) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + concat('store', s_store_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM ssr + UNION ALL SELECT 'catalog channel' AS channel , + concat('catalog_page', cp_catalog_page_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM csr + UNION ALL SELECT 'web channel' AS channel , + concat('web_site', web_site_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM wsr ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: x.channel ASC NULLS FIRST, x.id ASC NULLS FIRST, fetch=100 +02)--Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns_) AS returns_, sum(x.profit) AS profit +03)----Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns_), sum(x.profit)]] +04)------SubqueryAlias: x +05)--------Union +06)----------Projection: Utf8("store channel") AS channel, concat(Utf8View("store"), ssr.s_store_id) AS id, ssr.sales, ssr.returns_, ssr.profit - ssr.profit_loss AS profit +07)------------SubqueryAlias: ssr +08)--------------Projection: store.s_store_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns_, sum(salesreturns.net_loss) AS profit_loss +09)----------------Aggregate: groupBy=[[store.s_store_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] +10)------------------Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, store.s_store_id +11)--------------------Inner Join: salesreturns.store_sk = store.s_store_sk +12)----------------------Projection: salesreturns.store_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss +13)------------------------Inner Join: salesreturns.date_sk = date_dim.d_date_sk +14)--------------------------SubqueryAlias: salesreturns +15)----------------------------Union +16)------------------------------Projection: store_sales.ss_store_sk AS store_sk, store_sales.ss_sold_date_sk AS date_sk, store_sales.ss_ext_sales_price AS sales_price, store_sales.ss_net_profit AS profit, Decimal128(0.00,7,2) AS return_amt, Decimal128(0.00,7,2) AS net_loss +17)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] +18)------------------------------Projection: store_returns.sr_store_sk AS store_sk, store_returns.sr_returned_date_sk AS date_sk, Decimal128(0.00,7,2) AS sales_price, Decimal128(0.00,7,2) AS profit, store_returns.sr_return_amt AS return_amt, store_returns.sr_net_loss AS net_loss +19)--------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] +20)--------------------------Projection: date_dim.d_date_sk +21)----------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-06") +22)------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-06")] +23)----------------------TableScan: store projection=[s_store_sk, s_store_id] +24)----------Projection: Utf8("catalog channel") AS channel, concat(Utf8View("catalog_page"), csr.cp_catalog_page_id) AS id, csr.sales, csr.returns_, csr.profit - csr.profit_loss AS profit +25)------------SubqueryAlias: csr +26)--------------Projection: catalog_page.cp_catalog_page_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns_, sum(salesreturns.net_loss) AS profit_loss +27)----------------Aggregate: groupBy=[[catalog_page.cp_catalog_page_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] +28)------------------Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, catalog_page.cp_catalog_page_id +29)--------------------Inner Join: salesreturns.page_sk = catalog_page.cp_catalog_page_sk +30)----------------------Projection: salesreturns.page_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss +31)------------------------Inner Join: salesreturns.date_sk = date_dim.d_date_sk +32)--------------------------SubqueryAlias: salesreturns +33)----------------------------Union +34)------------------------------Projection: catalog_sales.cs_catalog_page_sk AS page_sk, catalog_sales.cs_sold_date_sk AS date_sk, catalog_sales.cs_ext_sales_price AS sales_price, catalog_sales.cs_net_profit AS profit, Decimal128(0.00,7,2) AS return_amt, Decimal128(0.00,7,2) AS net_loss +35)--------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_ext_sales_price, cs_net_profit] +36)------------------------------Projection: catalog_returns.cr_catalog_page_sk AS page_sk, catalog_returns.cr_returned_date_sk AS date_sk, Decimal128(0.00,7,2) AS sales_price, Decimal128(0.00,7,2) AS profit, catalog_returns.cr_return_amount AS return_amt, catalog_returns.cr_net_loss AS net_loss +37)--------------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_catalog_page_sk, cr_return_amount, cr_net_loss] +38)--------------------------Projection: date_dim.d_date_sk +39)----------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-06") +40)------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-06")] +41)----------------------TableScan: catalog_page projection=[cp_catalog_page_sk, cp_catalog_page_id] +42)----------Projection: Utf8("web channel") AS channel, concat(Utf8View("web_site"), wsr.web_site_id) AS id, wsr.sales, wsr.returns_, wsr.profit - wsr.profit_loss AS profit +43)------------SubqueryAlias: wsr +44)--------------Projection: web_site.web_site_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns_, sum(salesreturns.net_loss) AS profit_loss +45)----------------Aggregate: groupBy=[[web_site.web_site_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] +46)------------------Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, web_site.web_site_id +47)--------------------Inner Join: salesreturns.wsr_web_site_sk = web_site.web_site_sk +48)----------------------Projection: salesreturns.wsr_web_site_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss +49)------------------------Inner Join: salesreturns.date_sk = date_dim.d_date_sk +50)--------------------------SubqueryAlias: salesreturns +51)----------------------------Union +52)------------------------------Projection: web_sales.ws_web_site_sk AS wsr_web_site_sk, web_sales.ws_sold_date_sk AS date_sk, web_sales.ws_ext_sales_price AS sales_price, web_sales.ws_net_profit AS profit, Decimal128(0.00,7,2) AS return_amt, Decimal128(0.00,7,2) AS net_loss +53)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_web_site_sk, ws_ext_sales_price, ws_net_profit] +54)------------------------------Projection: web_sales.ws_web_site_sk AS wsr_web_site_sk, web_returns.wr_returned_date_sk AS date_sk, Decimal128(0.00,7,2) AS sales_price, Decimal128(0.00,7,2) AS profit, web_returns.wr_return_amt AS return_amt, web_returns.wr_net_loss AS net_loss +55)--------------------------------Left Join: web_returns.wr_item_sk = web_sales.ws_item_sk, web_returns.wr_order_number = web_sales.ws_order_number +56)----------------------------------TableScan: web_returns projection=[wr_returned_date_sk, wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] +57)----------------------------------TableScan: web_sales projection=[ws_item_sk, ws_web_site_sk, ws_order_number] +58)--------------------------Projection: date_dim.d_date_sk +59)----------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-06") +60)------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-06")] +61)----------------------TableScan: web_site projection=[web_site_sk, web_site_id] +physical_plan +01)SortPreservingMergeExec: [channel@0 ASC, id@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[channel@0 ASC, id@1 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns_)@4 as returns_, sum(x.profit)@5 as profit] +04)------AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +05)--------RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 4), input_partitions=12 +06)----------AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +07)------------UnionExec +08)--------------ProjectionExec: expr=[store channel as channel, concat(store, s_store_id@0) as id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.return_amt)@3 as returns_, sum(salesreturns.profit)@2 - sum(salesreturns.net_loss)@4 as profit] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[s_store_id@0 as s_store_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +10)------------------RepartitionExec: partitioning=Hash([s_store_id@0], 4), input_partitions=8 +11)--------------------AggregateExec: mode=Partial, gby=[s_store_id@4 as s_store_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, store_sk@0)], projection=[sales_price@3, profit@4, return_amt@5, net_loss@6, s_store_id@1] +13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id], file_type=vortex +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, date_sk@1)], projection=[store_sk@1, sales_price@3, profit@4, return_amt@5, net_loss@6] +15)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-06 +16)--------------------------UnionExec +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_store_sk@7 as store_sk, ss_sold_date_sk@0 as date_sk, ss_ext_sales_price@15 as sales_price, ss_net_profit@22 as profit, CAST(0.00 AS Decimal128(7, 2)) as return_amt, CAST(0.00 AS Decimal128(7, 2)) as net_loss], file_type=vortex +18)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_store_sk@7 as store_sk, sr_returned_date_sk@0 as date_sk, CAST(0.00 AS Decimal128(7, 2)) as sales_price, CAST(0.00 AS Decimal128(7, 2)) as profit, sr_return_amt@11 as return_amt, sr_net_loss@19 as net_loss], file_type=vortex +19)--------------ProjectionExec: expr=[catalog channel as channel, concat(catalog_page, cp_catalog_page_id@0) as id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.return_amt)@3 as returns_, sum(salesreturns.profit)@2 - sum(salesreturns.net_loss)@4 as profit] +20)----------------AggregateExec: mode=FinalPartitioned, gby=[cp_catalog_page_id@0 as cp_catalog_page_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +21)------------------RepartitionExec: partitioning=Hash([cp_catalog_page_id@0], 4), input_partitions=4 +22)--------------------AggregateExec: mode=Partial, gby=[cp_catalog_page_id@4 as cp_catalog_page_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +23)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(page_sk@0, cp_catalog_page_sk@0)], projection=[sales_price@1, profit@2, return_amt@3, net_loss@4, cp_catalog_page_id@6] +24)------------------------CoalescePartitionsExec +25)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, date_sk@1)], projection=[page_sk@1, sales_price@3, profit@4, return_amt@5, net_loss@6] +26)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-06 +27)----------------------------UnionExec +28)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_catalog_page_sk@12 as page_sk, cs_sold_date_sk@0 as date_sk, cs_ext_sales_price@23 as sales_price, cs_net_profit@33 as profit, CAST(0.00 AS Decimal128(7, 2)) as return_amt, CAST(0.00 AS Decimal128(7, 2)) as net_loss], file_type=vortex +29)------------------------------ProjectionExec: expr=[page_sk@0 as page_sk, date_sk@1 as date_sk, CAST(sales_price@2 AS Decimal128(7, 2)) as sales_price, CAST(profit@3 AS Decimal128(7, 2)) as profit, return_amt@4 as return_amt, net_loss@5 as net_loss] +30)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +31)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_catalog_page_sk@12 as page_sk, cr_returned_date_sk@0 as date_sk, 0.00 as sales_price, 0.00 as profit, cr_return_amount@18 as return_amt, cr_net_loss@26 as net_loss], file_type=vortex +32)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +33)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_page.vortex]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id], file_type=vortex +34)--------------ProjectionExec: expr=[web channel as channel, concat(web_site, web_site_id@0) as id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.return_amt)@3 as returns_, sum(salesreturns.profit)@2 - sum(salesreturns.net_loss)@4 as profit] +35)----------------AggregateExec: mode=FinalPartitioned, gby=[web_site_id@0 as web_site_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +36)------------------RepartitionExec: partitioning=Hash([web_site_id@0], 4), input_partitions=8 +37)--------------------AggregateExec: mode=Partial, gby=[web_site_id@4 as web_site_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] +38)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(web_site_sk@0, wsr_web_site_sk@0)], projection=[sales_price@3, profit@4, return_amt@5, net_loss@6, web_site_id@1] +39)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_site.vortex]]}, projection=[web_site_sk, web_site_id], file_type=vortex +40)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, date_sk@1)], projection=[wsr_web_site_sk@1, sales_price@3, profit@4, return_amt@5, net_loss@6] +41)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-06 +42)--------------------------UnionExec +43)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_web_site_sk@13 as wsr_web_site_sk, ws_sold_date_sk@0 as date_sk, ws_ext_sales_price@23 as sales_price, ws_net_profit@33 as profit, CAST(0.00 AS Decimal128(7, 2)) as return_amt, CAST(0.00 AS Decimal128(7, 2)) as net_loss], file_type=vortex +44)----------------------------ProjectionExec: expr=[ws_web_site_sk@0 as wsr_web_site_sk, wr_returned_date_sk@1 as date_sk, CAST(0.00 AS Decimal128(7, 2)) as sales_price, CAST(0.00 AS Decimal128(7, 2)) as profit, wr_return_amt@2 as return_amt, wr_net_loss@3 as net_loss] +45)------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(wr_item_sk@1, ws_item_sk@0), (wr_order_number@2, ws_order_number@2)], projection=[ws_web_site_sk@6, wr_returned_date_sk@0, wr_return_amt@3, wr_net_loss@4] +46)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_returned_date_sk, wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss], file_type=vortex +47)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_item_sk, ws_web_site_sk, ws_order_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no new file mode 100644 index 00000000000..824ae1819ac --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip, + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 30) + AND (sr_returned_date_sk - ss_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 60) + AND (sr_returned_date_sk - ss_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 90) + AND (sr_returned_date_sk - ss_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM store_sales, + store_returns, + store, + date_dim d1, + date_dim d2 +WHERE d2.d_year = 2001 + AND d2.d_moy = 8 + AND ss_ticket_number = sr_ticket_number + AND ss_item_sk = sr_item_sk + AND ss_sold_date_sk = d1.d_date_sk + AND sr_returned_date_sk = d2.d_date_sk + AND ss_customer_sk = sr_customer_sk + AND ss_store_sk = s_store_sk +GROUP BY s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip +ORDER BY s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip +LIMIT 100; +---- +logical_plan +01)Sort: store.s_store_name ASC NULLS LAST, store.s_company_id ASC NULLS LAST, store.s_street_number ASC NULLS LAST, store.s_street_name ASC NULLS LAST, store.s_street_type ASC NULLS LAST, store.s_suite_number ASC NULLS LAST, store.s_city ASC NULLS LAST, store.s_county ASC NULLS LAST, store.s_state ASC NULLS LAST, store.s_zip ASC NULLS LAST, fetch=100 +02)--Projection: store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days +03)----Aggregate: groupBy=[[store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip]], aggr=[[sum(CASE WHEN __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] +04)------Projection: store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk AS __common_expr_1, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip +05)--------Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk +06)----------Projection: store_sales.ss_sold_date_sk, store_returns.sr_returned_date_sk, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip +07)------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +08)--------------Projection: store_sales.ss_sold_date_sk, store_returns.sr_returned_date_sk, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip +09)----------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +10)------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_returns.sr_returned_date_sk +11)--------------------Inner Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_customer_sk = store_returns.sr_customer_sk +12)----------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number] +13)----------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number] +14)------------------TableScan: store projection=[s_store_sk, s_store_name, s_company_id, s_street_number, s_street_name, s_street_type, s_suite_number, s_city, s_county, s_state, s_zip] +15)--------------SubqueryAlias: d1 +16)----------------TableScan: date_dim projection=[d_date_sk] +17)----------SubqueryAlias: d2 +18)------------Projection: date_dim.d_date_sk +19)--------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(8) +20)----------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(8)] +physical_plan +01)SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST, s_company_id@1 ASC NULLS LAST, s_street_number@2 ASC NULLS LAST, s_street_name@3 ASC NULLS LAST, s_street_type@4 ASC NULLS LAST, s_suite_number@5 ASC NULLS LAST, s_city@6 ASC NULLS LAST, s_county@7 ASC NULLS LAST, s_state@8 ASC NULLS LAST, s_zip@9 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[s_store_name@0 as s_store_name, s_company_id@1 as s_company_id, s_street_number@2 as s_street_number, s_street_name@3 as s_street_name, s_street_type@4 as s_street_type, s_suite_number@5 as s_suite_number, s_city@6 as s_city, s_county@7 as s_county, s_state@8 as s_state, s_zip@9 as s_zip, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@10 as 30 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@11 as 31-60 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@12 as 61-90 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@13 as 91-120 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@14 as >120 days] +03)----SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST, s_company_id@1 ASC NULLS LAST, s_street_number@2 ASC NULLS LAST, s_street_name@3 ASC NULLS LAST, s_street_type@4 ASC NULLS LAST, s_suite_number@5 ASC NULLS LAST, s_city@6 ASC NULLS LAST, s_county@7 ASC NULLS LAST, s_state@8 ASC NULLS LAST, s_zip@9 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name, s_company_id@1 as s_company_id, s_street_number@2 as s_street_number, s_street_name@3 as s_street_name, s_street_type@4 as s_street_type, s_suite_number@5 as s_suite_number, s_city@6 as s_city, s_county@7 as s_county, s_state@8 as s_state, s_zip@9 as s_zip], aggr=[sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +05)--------RepartitionExec: partitioning=Hash([s_store_name@0, s_company_id@1, s_street_number@2, s_street_name@3, s_street_type@4, s_suite_number@5, s_city@6, s_county@7, s_state@8, s_zip@9], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[s_store_name@1 as s_store_name, s_company_id@2 as s_company_id, s_street_number@3 as s_street_number, s_street_name@4 as s_street_name, s_street_type@5 as s_street_type, s_suite_number@6 as s_suite_number, s_city@7 as s_city, s_county@8 as s_county, s_state@9 as s_state, s_zip@10 as s_zip], aggr=[sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +07)------------ProjectionExec: expr=[sr_returned_date_sk@0 - ss_sold_date_sk@1 as __common_expr_1, s_store_name@2 as s_store_name, s_company_id@3 as s_company_id, s_street_number@4 as s_street_number, s_street_name@5 as s_street_name, s_street_type@6 as s_street_type, s_suite_number@7 as s_suite_number, s_city@8 as s_city, s_county@9 as s_county, s_state@10 as s_state, s_zip@11 as s_zip] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@1)], projection=[sr_returned_date_sk@2, ss_sold_date_sk@1, s_store_name@3, s_company_id@4, s_street_number@5, s_street_name@6, s_street_type@7, s_suite_number@8, s_city@9, s_county@10, s_state@11, s_zip@12] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 8 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_sold_date_sk@1, sr_returned_date_sk@2, s_store_name@3, s_company_id@4, s_street_number@5, s_street_name@6, s_street_type@7, s_suite_number@8, s_city@9, s_county@10, s_state@11, s_zip@12] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_sold_date_sk@11, sr_returned_date_sk@13, s_store_name@1, s_company_id@2, s_street_number@3, s_street_name@4, s_street_type@5, s_suite_number@6, s_city@7, s_county@8, s_state@9, s_zip@10] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_company_id, s_street_number, s_street_name, s_street_type, s_suite_number, s_city, s_county, s_state, s_zip], file_type=vortex +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_ticket_number@3, ss_ticket_number@4), (sr_item_sk@1, ss_item_sk@1), (sr_customer_sk@2, ss_customer_sk@2)], projection=[ss_sold_date_sk@4, ss_store_sk@7, sr_returned_date_sk@0] +15)----------------------CoalescePartitionsExec +16)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number], file_type=vortex +17)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no new file mode 100644 index 00000000000..020c5a758e8 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no @@ -0,0 +1,122 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH web_v1 AS + (SELECT ws_item_sk item_sk, + d_date, + sum(sum(ws_sales_price)) OVER (PARTITION BY ws_item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) cume_sales + FROM web_sales, + date_dim + WHERE ws_sold_date_sk=d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + AND ws_item_sk IS NOT NULL + GROUP BY ws_item_sk, + d_date), + store_v1 AS + (SELECT ss_item_sk item_sk, + d_date, + sum(sum(ss_sales_price)) OVER (PARTITION BY ss_item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) cume_sales + FROM store_sales, + date_dim + WHERE ss_sold_date_sk=d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + AND ss_item_sk IS NOT NULL + GROUP BY ss_item_sk, + d_date) +SELECT * +FROM + (SELECT item_sk, + d_date, + web_sales, + store_sales, + max(web_sales) OVER (PARTITION BY item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) web_cumulative, + max(store_sales) OVER (PARTITION BY item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) store_cumulative + FROM + (SELECT CASE + WHEN web.item_sk IS NOT NULL THEN web.item_sk + ELSE store.item_sk + END item_sk, + CASE + WHEN web.d_date IS NOT NULL THEN web.d_date + ELSE store.d_date + END d_date, + web.cume_sales web_sales, + store.cume_sales store_sales + FROM web_v1 web + FULL OUTER JOIN store_v1 store ON (web.item_sk = store.item_sk + AND web.d_date = store.d_date))x)y +WHERE web_cumulative > store_cumulative +ORDER BY item_sk NULLS FIRST, + d_date NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: y.item_sk ASC NULLS FIRST, y.d_date ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: y +03)----Projection: x.item_sk, x.d_date, x.web_sales, x.store_sales, max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS web_cumulative, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS store_cumulative +04)------Filter: max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW > max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +05)--------WindowAggr: windowExpr=[[max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +06)----------SubqueryAlias: x +07)------------Projection: CASE WHEN web.item_sk IS NOT NULL THEN web.item_sk ELSE store.item_sk END AS item_sk, CASE WHEN web.d_date IS NOT NULL THEN web.d_date ELSE store.d_date END AS d_date, web.cume_sales AS web_sales, store.cume_sales AS store_sales +08)--------------Full Join: web.item_sk = store.item_sk, web.d_date = store.d_date +09)----------------SubqueryAlias: web +10)------------------SubqueryAlias: web_v1 +11)--------------------Projection: web_sales.ws_item_sk AS item_sk, date_dim.d_date, sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales +12)----------------------WindowAggr: windowExpr=[[sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +13)------------------------Aggregate: groupBy=[[web_sales.ws_item_sk, date_dim.d_date]], aggr=[[sum(web_sales.ws_sales_price)]] +14)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_sales_price, date_dim.d_date +15)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +16)------------------------------Filter: web_sales.ws_item_sk IS NOT NULL +17)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_sales_price], partial_filters=[web_sales.ws_item_sk IS NOT NULL] +18)------------------------------Projection: date_dim.d_date_sk, date_dim.d_date +19)--------------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +20)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +21)----------------SubqueryAlias: store +22)------------------SubqueryAlias: store_v1 +23)--------------------Projection: store_sales.ss_item_sk AS item_sk, date_dim.d_date, sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales +24)----------------------WindowAggr: windowExpr=[[sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +25)------------------------Aggregate: groupBy=[[store_sales.ss_item_sk, date_dim.d_date]], aggr=[[sum(store_sales.ss_sales_price)]] +26)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_sales_price, date_dim.d_date +27)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +28)------------------------------Filter: store_sales.ss_item_sk IS NOT NULL +29)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_sales_price], partial_filters=[store_sales.ss_item_sk IS NOT NULL] +30)------------------------------Projection: date_dim.d_date_sk, date_dim.d_date +31)--------------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +32)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +physical_plan +01)SortPreservingMergeExec: [item_sk@0 ASC, d_date@1 ASC], fetch=100 +02)--ProjectionExec: expr=[item_sk@0 as item_sk, d_date@1 as d_date, web_sales@2 as web_sales, store_sales@3 as store_sales, max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as web_cumulative, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as store_cumulative] +03)----SortExec: TopK(fetch=100), expr=[item_sk@0 ASC, d_date@1 ASC], preserve_partitioning=[true] +04)------FilterExec: max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 > max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 +05)--------BoundedWindowAggExec: wdw=[max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": nullable Decimal128(27, 2) }, frame: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": nullable Decimal128(27, 2) }, frame: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +06)----------SortExec: expr=[item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] +07)------------RepartitionExec: partitioning=Hash([item_sk@0], 4), input_partitions=4 +08)--------------ProjectionExec: expr=[CASE WHEN item_sk@0 IS NOT NULL THEN item_sk@0 ELSE item_sk@3 END as item_sk, CASE WHEN d_date@1 IS NOT NULL THEN d_date@1 ELSE d_date@4 END as d_date, cume_sales@2 as web_sales, cume_sales@5 as store_sales] +09)----------------HashJoinExec: mode=CollectLeft, join_type=Full, on=[(item_sk@0, item_sk@0), (d_date@1, d_date@1)] +10)------------------CoalescePartitionsExec +11)--------------------ProjectionExec: expr=[ws_item_sk@0 as item_sk, d_date@1 as d_date, sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as cume_sales] +12)----------------------BoundedWindowAggExec: wdw=[sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": nullable Decimal128(27, 2) }, frame: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +13)------------------------SortExec: expr=[ws_item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] +14)--------------------------RepartitionExec: partitioning=Hash([ws_item_sk@0], 4), input_partitions=4 +15)----------------------------AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk, d_date@1 as d_date], aggr=[sum(web_sales.ws_sales_price)] +16)------------------------------RepartitionExec: partitioning=Hash([ws_item_sk@0, d_date@1], 4), input_partitions=4 +17)--------------------------------AggregateExec: mode=Partial, gby=[ws_item_sk@0 as ws_item_sk, d_date@2 as d_date], aggr=[sum(web_sales.ws_sales_price)] +18)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@3, ws_sales_price@4, d_date@1] +19)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +20)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_sales_price], file_type=vortex, predicate: ws_item_sk@3 IS NOT NULL +21)------------------ProjectionExec: expr=[ss_item_sk@0 as item_sk, d_date@1 as d_date, sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as cume_sales] +22)--------------------BoundedWindowAggExec: wdw=[sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": nullable Decimal128(27, 2) }, frame: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +23)----------------------SortExec: expr=[ss_item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] +24)------------------------RepartitionExec: partitioning=Hash([ss_item_sk@0], 4), input_partitions=4 +25)--------------------------AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk, d_date@1 as d_date], aggr=[sum(store_sales.ss_sales_price)] +26)----------------------------RepartitionExec: partitioning=Hash([ss_item_sk@0, d_date@1], 4), input_partitions=4 +27)------------------------------AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk, d_date@2 as d_date], aggr=[sum(store_sales.ss_sales_price)] +28)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_sales_price@4, d_date@1] +29)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +30)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_sales_price], file_type=vortex, predicate: ss_item_sk@2 IS NOT NULL diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q52.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q52.slt.no new file mode 100644 index 00000000000..8b7da508f98 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q52.slt.no @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT dt.d_year, + item.i_brand_id brand_id, + item.i_brand brand, + sum(ss_ext_sales_price) ext_price +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manager_id = 1 + AND dt.d_moy=11 + AND dt.d_year=2000 +GROUP BY dt.d_year, + item.i_brand, + item.i_brand_id +ORDER BY dt.d_year, + ext_price DESC, + brand_id +LIMIT 100 ; +---- +logical_plan +01)Sort: dt.d_year ASC NULLS LAST, ext_price DESC NULLS FIRST, brand_id ASC NULLS LAST, fetch=100 +02)--Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price +03)----Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +04)------Projection: dt.d_year, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_ext_sales_price +07)------------Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk +08)--------------SubqueryAlias: dt +09)----------------Projection: date_dim.d_date_sk, date_dim.d_year +10)------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(2000) +11)--------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(2000)] +12)--------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +13)----------Projection: item.i_item_sk, item.i_brand_id, item.i_brand +14)------------Filter: item.i_manager_id = Int64(1) +15)--------------TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manager_id], partial_filters=[item.i_manager_id = Int64(1)] +physical_plan +01)SortPreservingMergeExec: [d_year@0 ASC NULLS LAST, ext_price@3 DESC, brand_id@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@2 as brand_id, i_brand@1 as brand, sum(store_sales.ss_ext_sales_price)@3 as ext_price] +03)----SortExec: TopK(fetch=100), expr=[sum(store_sales.ss_ext_sales_price)@3 DESC, i_brand_id@2 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand@1 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([0]) +05)--------RepartitionExec: partitioning=Hash([d_year@0, i_brand@1, i_brand_id@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand@3 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)], ordering_mode=PartiallySorted([0]) +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[d_year@3, ss_ext_sales_price@5, i_brand_id@1, i_brand@2] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_brand], file_type=vortex, predicate: i_manager_id@20 = 1 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_ext_sales_price@4] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 2000 +11)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q53.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q53.slt.no new file mode 100644 index 00000000000..98bbc321b89 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q53.slt.no @@ -0,0 +1,94 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT i_manufact_id, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_manufact_id) avg_quarterly_sales + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_month_seq IN (1200, + 1200+1, + 1200+2, + 1200+3, + 1200+4, + 1200+5, + 1200+6, + 1200+7, + 1200+8, + 1200+9, + 1200+10, + 1200+11) + AND ((i_category IN ('Books', + 'Children', + 'Electronics') + AND i_class IN ('personal', + 'portable', + 'reference', + 'self-help') + AND i_brand IN ('scholaramalgamalg #14', + 'scholaramalgamalg #7', + 'exportiunivamalg #9', + 'scholaramalgamalg #9')) or(i_category IN ('Women','Music','Men') + AND i_class IN ('accessories','classical','fragrances','pants') + AND i_brand IN ('amalgimporto #1','edu packscholar #1','exportiimporto #1', 'importoamalg #1'))) + GROUP BY i_manufact_id, + d_qoy) tmp1 +WHERE CASE + WHEN avg_quarterly_sales > 0 THEN ABS (sum_sales - avg_quarterly_sales)/ avg_quarterly_sales + ELSE NULL + END > 0.1 +ORDER BY avg_quarterly_sales, + sum_sales, + i_manufact_id +LIMIT 100; +---- +logical_plan +01)Sort: tmp1.avg_quarterly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, tmp1.i_manufact_id ASC NULLS LAST, fetch=100 +02)--SubqueryAlias: tmp1 +03)----Projection: item.i_manufact_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_quarterly_sales +04)------Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(0.000000,21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(NULL,32,10) END > Decimal128(0.1000000000,32,10) +05)--------WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +06)----------Projection: item.i_manufact_id, sum(store_sales.ss_sales_price) +07)------------Aggregate: groupBy=[[item.i_manufact_id, date_dim.d_qoy]], aggr=[[sum(store_sales.ss_sales_price)]] +08)--------------Projection: item.i_manufact_id, store_sales.ss_sales_price, date_dim.d_qoy +09)----------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +10)------------------Projection: item.i_manufact_id, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_qoy +11)--------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +12)----------------------Projection: item.i_manufact_id, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +13)------------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +14)--------------------------Projection: item.i_item_sk, item.i_manufact_id +15)----------------------------Filter: (item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Children") OR item.i_category = Utf8View("Electronics")) AND item.i_class IN ([Utf8View("personal"), Utf8View("portable"), Utf8View("reference"), Utf8View("self-help")]) AND item.i_brand IN ([Utf8View("scholaramalgamalg #14"), Utf8View("scholaramalgamalg #7"), Utf8View("exportiunivamalg #9"), Utf8View("scholaramalgamalg #9")]) OR (item.i_category = Utf8View("Women") OR item.i_category = Utf8View("Music") OR item.i_category = Utf8View("Men")) AND item.i_class IN ([Utf8View("accessories"), Utf8View("classical"), Utf8View("fragrances"), Utf8View("pants")]) AND item.i_brand IN ([Utf8View("amalgimporto #1"), Utf8View("edu packscholar #1"), Utf8View("exportiimporto #1"), Utf8View("importoamalg #1")]) +16)------------------------------TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_manufact_id], partial_filters=[(item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Children") OR item.i_category = Utf8View("Electronics")) AND item.i_class IN ([Utf8View("personal"), Utf8View("portable"), Utf8View("reference"), Utf8View("self-help")]) AND item.i_brand IN ([Utf8View("scholaramalgamalg #14"), Utf8View("scholaramalgamalg #7"), Utf8View("exportiunivamalg #9"), Utf8View("scholaramalgamalg #9")]) OR (item.i_category = Utf8View("Women") OR item.i_category = Utf8View("Music") OR item.i_category = Utf8View("Men")) AND item.i_class IN ([Utf8View("accessories"), Utf8View("classical"), Utf8View("fragrances"), Utf8View("pants")]) AND item.i_brand IN ([Utf8View("amalgimporto #1"), Utf8View("edu packscholar #1"), Utf8View("exportiimporto #1"), Utf8View("importoamalg #1")])] +17)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +18)----------------------Projection: date_dim.d_date_sk, date_dim.d_qoy +19)------------------------Filter: date_dim.d_month_seq IN ([Int64(1200), Int64(1201), Int64(1202), Int64(1203), Int64(1204), Int64(1205), Int64(1206), Int64(1207), Int64(1208), Int64(1209), Int64(1210), Int64(1211)]) +20)--------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq, d_qoy], partial_filters=[date_dim.d_month_seq IN ([Int64(1200), Int64(1201), Int64(1202), Int64(1203), Int64(1204), Int64(1205), Int64(1206), Int64(1207), Int64(1208), Int64(1209), Int64(1210), Int64(1211)])] +21)------------------TableScan: store projection=[s_store_sk] +physical_plan +01)SortPreservingMergeExec: [avg_quarterly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST, i_manufact_id@0 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_sales_price)@1 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 as avg_quarterly_sales] +03)----SortExec: TopK(fetch=100), expr=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 ASC NULLS LAST, sum(store_sales.ss_sales_price)@1 ASC NULLS LAST, i_manufact_id@0 ASC NULLS LAST], preserve_partitioning=[true] +04)------FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 > 0.000000 THEN abs(sum(store_sales.ss_sales_price)@1 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 END > 0.1000000000 +05)--------WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +06)----------SortExec: expr=[i_manufact_id@0 ASC NULLS LAST], preserve_partitioning=[true] +07)------------RepartitionExec: partitioning=Hash([i_manufact_id@0], 4), input_partitions=4 +08)--------------ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_sales_price)@2 as sum(store_sales.ss_sales_price)] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[i_manufact_id@0 as i_manufact_id, d_qoy@1 as d_qoy], aggr=[sum(store_sales.ss_sales_price)] +10)------------------RepartitionExec: partitioning=Hash([i_manufact_id@0, d_qoy@1], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[i_manufact_id@0 as i_manufact_id, d_qoy@2 as d_qoy], aggr=[sum(store_sales.ss_sales_price)] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[i_manufact_id@1, ss_sales_price@3, d_qoy@4] +13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@1)], projection=[i_manufact_id@2, ss_store_sk@4, ss_sales_price@5, d_qoy@1] +15)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_qoy], file_type=vortex, predicate: d_month_seq@3 IN (SET) ([1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211]) +16)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_manufact_id@1, ss_sold_date_sk@2, ss_store_sk@4, ss_sales_price@5] +17)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex, predicate: (i_category@12 = Books OR i_category@12 = Children OR i_category@12 = Electronics) AND i_class@10 IN (SET) ([personal, portable, reference, self-help]) AND i_brand@8 IN (SET) ([scholaramalgamalg #14, scholaramalgamalg #7, exportiunivamalg #9, scholaramalgamalg #9]) OR (i_category@12 = Women OR i_category@12 = Music OR i_category@12 = Men) AND i_class@10 IN (SET) ([accessories, classical, fragrances, pants]) AND i_brand@8 IN (SET) ([amalgimporto #1, edu packscholar #1, exportiimporto #1, importoamalg #1]) +18)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no new file mode 100644 index 00000000000..d1adcfcd063 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no @@ -0,0 +1,166 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH my_customers AS + (SELECT DISTINCT c_customer_sk, + c_current_addr_sk + FROM + (SELECT cs_sold_date_sk sold_date_sk, + cs_bill_customer_sk customer_sk, + cs_item_sk item_sk + FROM catalog_sales + UNION ALL SELECT ws_sold_date_sk sold_date_sk, + ws_bill_customer_sk customer_sk, + ws_item_sk item_sk + FROM web_sales) cs_or_ws_sales, + item, + date_dim, + customer + WHERE sold_date_sk = d_date_sk + AND item_sk = i_item_sk + AND i_category = 'Women' + AND i_class = 'maternity' + AND c_customer_sk = cs_or_ws_sales.customer_sk + AND d_moy = 12 + AND d_year = 1998 ), + my_revenue AS + (SELECT c_customer_sk, + sum(ss_ext_sales_price) AS revenue + FROM my_customers, + store_sales, + customer_address, + store, + date_dim + WHERE c_current_addr_sk = ca_address_sk + AND ca_county = s_county + AND ca_state = s_state + AND ss_sold_date_sk = d_date_sk + AND c_customer_sk = ss_customer_sk + AND d_month_seq BETWEEN + (SELECT DISTINCT d_month_seq+1 + FROM date_dim + WHERE d_year = 1998 + AND d_moy = 12) AND + (SELECT DISTINCT d_month_seq+3 + FROM date_dim + WHERE d_year = 1998 + AND d_moy = 12) + GROUP BY c_customer_sk), + segments AS + (SELECT cast(round(revenue/50) AS int) AS SEGMENT + FROM my_revenue) +SELECT SEGMENT, + count(*) AS num_customers, + SEGMENT*50 AS segment_base +FROM segments +GROUP BY SEGMENT +ORDER BY SEGMENT NULLS FIRST, + num_customers NULLS FIRST, + segment_base +LIMIT 100; +---- +logical_plan +01)Sort: segments.segment ASC NULLS FIRST, fetch=100 +02)--Projection: segments.segment, count(Int64(1)) AS count(*) AS num_customers, CAST(segments.segment AS Int64) * Int64(50) AS segment_base +03)----Aggregate: groupBy=[[segments.segment]], aggr=[[count(Int64(1))]] +04)------SubqueryAlias: segments +05)--------Projection: CAST(round(my_revenue.revenue / Decimal128(50,20,0)) AS Int32) AS segment +06)----------SubqueryAlias: my_revenue +07)------------Projection: sum(store_sales.ss_ext_sales_price) AS revenue +08)--------------Aggregate: groupBy=[[my_customers.c_customer_sk]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +09)----------------Projection: my_customers.c_customer_sk, store_sales.ss_ext_sales_price +10)------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +11)--------------------Projection: my_customers.c_customer_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price +12)----------------------Inner Join: customer_address.ca_county = store.s_county, customer_address.ca_state = store.s_state +13)------------------------Projection: my_customers.c_customer_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, customer_address.ca_county, customer_address.ca_state +14)--------------------------Inner Join: my_customers.c_current_addr_sk = customer_address.ca_address_sk +15)----------------------------Projection: my_customers.c_customer_sk, my_customers.c_current_addr_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price +16)------------------------------Inner Join: my_customers.c_customer_sk = store_sales.ss_customer_sk +17)--------------------------------SubqueryAlias: my_customers +18)----------------------------------Aggregate: groupBy=[[customer.c_customer_sk, customer.c_current_addr_sk]], aggr=[[]] +19)------------------------------------RightSemi Join: cs_or_ws_sales.customer_sk = customer.c_customer_sk +20)--------------------------------------Projection: cs_or_ws_sales.customer_sk +21)----------------------------------------LeftSemi Join: cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk +22)------------------------------------------Projection: cs_or_ws_sales.sold_date_sk, cs_or_ws_sales.customer_sk +23)--------------------------------------------LeftSemi Join: cs_or_ws_sales.item_sk = item.i_item_sk +24)----------------------------------------------SubqueryAlias: cs_or_ws_sales +25)------------------------------------------------Union +26)--------------------------------------------------Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk +27)----------------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] +28)--------------------------------------------------Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_bill_customer_sk AS customer_sk, web_sales.ws_item_sk AS item_sk +29)----------------------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk] +30)----------------------------------------------Projection: item.i_item_sk +31)------------------------------------------------Filter: item.i_category = Utf8View("Women") AND item.i_class = Utf8View("maternity") +32)--------------------------------------------------TableScan: item projection=[i_item_sk, i_class, i_category], partial_filters=[item.i_category = Utf8View("Women"), item.i_class = Utf8View("maternity")] +33)------------------------------------------Projection: date_dim.d_date_sk +34)--------------------------------------------Filter: date_dim.d_moy = Int64(12) AND date_dim.d_year = Int64(1998) +35)----------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(12), date_dim.d_year = Int64(1998)] +36)--------------------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +37)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_sales_price] +38)----------------------------TableScan: customer_address projection=[ca_address_sk, ca_county, ca_state] +39)------------------------TableScan: store projection=[s_county, s_state] +40)--------------------Projection: date_dim.d_date_sk +41)----------------------Filter: date_dim.d_month_seq >= () AND date_dim.d_month_seq <= () +42)------------------------Subquery: +43)--------------------------Aggregate: groupBy=[[date_dim.d_month_seq + Int64(1)]], aggr=[[]] +44)----------------------------Projection: date_dim.d_month_seq + Int64(1) +45)------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) +46)--------------------------------TableScan: date_dim projection=[d_month_seq, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(12)] +47)------------------------Subquery: +48)--------------------------Aggregate: groupBy=[[date_dim.d_month_seq + Int64(3)]], aggr=[[]] +49)----------------------------Projection: date_dim.d_month_seq + Int64(3) +50)------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) +51)--------------------------------TableScan: date_dim projection=[d_month_seq, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(12)] +52)------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq] +physical_plan +01)ScalarSubqueryExec: subqueries=2 +02)--SortPreservingMergeExec: [segment@0 ASC], fetch=100 +03)----SortExec: TopK(fetch=100), expr=[segment@0 ASC], preserve_partitioning=[true] +04)------ProjectionExec: expr=[segment@0 as segment, count(Int64(1))@1 as num_customers, CAST(segment@0 AS Int64) * 50 as segment_base] +05)--------AggregateExec: mode=FinalPartitioned, gby=[segment@0 as segment], aggr=[count(Int64(1))] +06)----------RepartitionExec: partitioning=Hash([segment@0], 4), input_partitions=4 +07)------------AggregateExec: mode=Partial, gby=[segment@0 as segment], aggr=[count(Int64(1))] +08)--------------ProjectionExec: expr=[CAST(round(sum(store_sales.ss_ext_sales_price)@1 / 50) AS Int32) as segment] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_ext_sales_price)] +10)------------------RepartitionExec: partitioning=Hash([c_customer_sk@0], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_ext_sales_price)] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_sold_date_sk@1, d_date_sk@0)], projection=[c_customer_sk@0, ss_ext_sales_price@2] +13)------------------------CoalescePartitionsExec +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_county@0, ca_county@3), (s_state@1, ca_state@4)], projection=[c_customer_sk@2, ss_sold_date_sk@3, ss_ext_sales_price@4] +15)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_county, s_state], file_type=vortex +16)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@1)], projection=[c_customer_sk@3, ss_sold_date_sk@5, ss_ext_sales_price@6, ca_county@1, ca_state@2] +17)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county, ca_state], file_type=vortex +18)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_sk@0, c_current_addr_sk@1, ss_sold_date_sk@2, ss_ext_sales_price@4] +19)--------------------------------CoalescePartitionsExec +20)----------------------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk, c_current_addr_sk@1 as c_current_addr_sk], aggr=[] +21)------------------------------------RepartitionExec: partitioning=Hash([c_customer_sk@0, c_current_addr_sk@1], 4), input_partitions=4 +22)--------------------------------------AggregateExec: mode=Partial, gby=[c_customer_sk@0 as c_customer_sk, c_current_addr_sk@1 as c_current_addr_sk], aggr=[] +23)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(customer_sk@0, c_customer_sk@0)] +24)------------------------------------------CoalescePartitionsExec +25)--------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, sold_date_sk@0)], projection=[customer_sk@1] +26)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 12 AND d_year@6 = 1998 +27)----------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_sk@0, item_sk@2)], projection=[sold_date_sk@0, customer_sk@1] +28)------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_category@12 = Women AND i_class@10 = maternity +29)------------------------------------------------UnionExec +30)--------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk@0 as sold_date_sk, cs_bill_customer_sk@3 as customer_sk, cs_item_sk@15 as item_sk], file_type=vortex +31)--------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk@0 as sold_date_sk, ws_bill_customer_sk@4 as customer_sk, ws_item_sk@3 as item_sk], file_type=vortex +32)------------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +33)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +34)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_sales_price], file_type=vortex +35)------------------------FilterExec: d_month_seq@1 >= scalar_subquery() AND d_month_seq@1 <= scalar_subquery(), projection=[d_date_sk@0] +36)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +37)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_month_seq], file_type=vortex +38)--AggregateExec: mode=FinalPartitioned, gby=[date_dim.d_month_seq + Int64(1)@0 as date_dim.d_month_seq + Int64(1)], aggr=[] +39)----RepartitionExec: partitioning=Hash([date_dim.d_month_seq + Int64(1)@0], 4), input_partitions=4 +40)------AggregateExec: mode=Partial, gby=[date_dim.d_month_seq + Int64(1)@0 as date_dim.d_month_seq + Int64(1)], aggr=[] +41)--------ProjectionExec: expr=[d_month_seq@0 + 1 as date_dim.d_month_seq + Int64(1)] +42)----------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +43)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_month_seq, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 12 +44)--AggregateExec: mode=FinalPartitioned, gby=[date_dim.d_month_seq + Int64(3)@0 as date_dim.d_month_seq + Int64(3)], aggr=[] +45)----RepartitionExec: partitioning=Hash([date_dim.d_month_seq + Int64(3)@0], 4), input_partitions=4 +46)------AggregateExec: mode=Partial, gby=[date_dim.d_month_seq + Int64(3)@0 as date_dim.d_month_seq + Int64(3)], aggr=[] +47)--------ProjectionExec: expr=[d_month_seq@0 + 3 as date_dim.d_month_seq + Int64(3)] +48)----------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +49)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_month_seq, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 12 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q55.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q55.slt.no new file mode 100644 index 00000000000..6e6a179358c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q55.slt.no @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_brand_id brand_id, + i_brand brand, + sum(ss_ext_sales_price) ext_price +FROM date_dim, + store_sales, + item +WHERE d_date_sk = ss_sold_date_sk + AND ss_item_sk = i_item_sk + AND i_manager_id=28 + AND d_moy=11 + AND d_year=1999 +GROUP BY i_brand, + i_brand_id +ORDER BY ext_price DESC, + i_brand_id +LIMIT 100 ; +---- +logical_plan +01)Sort: ext_price DESC NULLS FIRST, brand_id ASC NULLS LAST, fetch=100 +02)--Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price +03)----Aggregate: groupBy=[[item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +04)------Projection: store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand +05)--------Inner Join: store_sales.ss_item_sk = item.i_item_sk +06)----------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +07)------------Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk +08)--------------Projection: date_dim.d_date_sk +09)----------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1999) +10)------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1999)] +11)--------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +12)----------Projection: item.i_item_sk, item.i_brand_id, item.i_brand +13)------------Filter: item.i_manager_id = Int64(28) +14)--------------TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manager_id], partial_filters=[item.i_manager_id = Int64(28)] +physical_plan +01)SortPreservingMergeExec: [ext_price@2 DESC, brand_id@0 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, sum(store_sales.ss_ext_sales_price)@2 as ext_price] +03)----SortExec: TopK(fetch=100), expr=[sum(store_sales.ss_ext_sales_price)@2 DESC, i_brand_id@1 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] +05)--------RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_brand@2 as i_brand, i_brand_id@1 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@4, i_brand_id@1, i_brand@2] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_brand], file_type=vortex, predicate: i_manager_id@20 = 28 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_ext_sales_price@3] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1999 +11)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no new file mode 100644 index 00000000000..9ca42a709be --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no @@ -0,0 +1,200 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss AS + (SELECT i_item_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + cs AS + (SELECT i_item_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + ws AS + (SELECT i_item_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id) +SELECT i_item_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_item_id +ORDER BY total_sales NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: total_sales ASC NULLS FIRST, tmp1.i_item_id ASC NULLS FIRST, fetch=100 +02)--Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales +03)----Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] +04)------SubqueryAlias: tmp1 +05)--------Union +06)----------SubqueryAlias: ss +07)------------Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales +08)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +09)----------------LeftSemi Join: item.i_item_id = __correlated_sq_1.i_item_id +10)------------------Projection: store_sales.ss_ext_sales_price, item.i_item_id +11)--------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +13)------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +14)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price +15)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(2) +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(2)] +20)--------------------------Projection: customer_address.ca_address_sk +21)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +22)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +23)----------------------TableScan: item projection=[i_item_sk, i_item_id] +24)------------------SubqueryAlias: __correlated_sq_1 +25)--------------------Projection: item.i_item_id +26)----------------------Filter: item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished") +27)------------------------TableScan: item projection=[i_item_id, i_color], partial_filters=[item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished")] +28)----------SubqueryAlias: cs +29)------------Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales +30)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] +31)----------------LeftSemi Join: item.i_item_id = __correlated_sq_2.i_item_id +32)------------------Projection: catalog_sales.cs_ext_sales_price, item.i_item_id +33)--------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +34)----------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +35)------------------------Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk +36)--------------------------Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +37)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +38)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] +39)------------------------------Projection: date_dim.d_date_sk +40)--------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(2) +41)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(2)] +42)--------------------------Projection: customer_address.ca_address_sk +43)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +44)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +45)----------------------TableScan: item projection=[i_item_sk, i_item_id] +46)------------------SubqueryAlias: __correlated_sq_2 +47)--------------------Projection: item.i_item_id +48)----------------------Filter: item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished") +49)------------------------TableScan: item projection=[i_item_id, i_color], partial_filters=[item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished")] +50)----------SubqueryAlias: ws +51)------------Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales +52)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +53)----------------LeftSemi Join: item.i_item_id = __correlated_sq_3.i_item_id +54)------------------Projection: web_sales.ws_ext_sales_price, item.i_item_id +55)--------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +56)----------------------Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price +57)------------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +58)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price +59)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +60)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] +61)------------------------------Projection: date_dim.d_date_sk +62)--------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(2) +63)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(2)] +64)--------------------------Projection: customer_address.ca_address_sk +65)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +66)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +67)----------------------TableScan: item projection=[i_item_sk, i_item_id] +68)------------------SubqueryAlias: __correlated_sq_3 +69)--------------------Projection: item.i_item_id +70)----------------------Filter: item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished") +71)------------------------TableScan: item projection=[i_item_id, i_color], partial_filters=[item.i_color = Utf8View("slate") OR item.i_color = Utf8View("blanched") OR item.i_color = Utf8View("burnished")] +physical_plan +01)SortPreservingMergeExec: [total_sales@1 ASC, i_item_id@0 ASC], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(tmp1.total_sales)@1 as total_sales] +03)----SortExec: TopK(fetch=100), expr=[sum(tmp1.total_sales)@1 ASC, i_item_id@0 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=SinglePartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(tmp1.total_sales)] +05)--------InterleaveExec +06)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_color@17 = slate OR i_color@17 = blanched OR i_color@17 = burnished +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@3, i_item_id@1] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_item_sk@1, ss_ext_sales_price@3] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_addr_sk@3, ss_ext_sales_price@4] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 2 +18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +19)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] +20)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +21)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +22)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +23)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +24)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_color@17 = slate OR i_color@17 = blanched OR i_color@17 = burnished +25)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +26)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@3] +27)------------------------CoalescePartitionsExec +28)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, cs_bill_addr_sk@0)], projection=[cs_item_sk@2, cs_ext_sales_price@3] +29)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +30)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_addr_sk@2, cs_item_sk@3, cs_ext_sales_price@4] +31)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 2 +32)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex +33)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +34)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] +35)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +36)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +37)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +38)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +39)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_color@17 = slate OR i_color@17 = blanched OR i_color@17 = burnished +40)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +41)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@3] +42)------------------------CoalescePartitionsExec +43)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ws_bill_addr_sk@1)], projection=[ws_item_sk@1, ws_ext_sales_price@3] +44)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +45)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_bill_addr_sk@3, ws_ext_sales_price@4] +46)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 2 +47)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +48)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no new file mode 100644 index 00000000000..d09ad90ac2d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no @@ -0,0 +1,183 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH v1 AS + (SELECT i_category, + i_brand, + cc_name, + d_year, + d_moy, + sum(cs_sales_price) sum_sales, + avg(sum(cs_sales_price)) OVER (PARTITION BY i_category, + i_brand, + cc_name, + d_year) avg_monthly_sales, + rank() OVER (PARTITION BY i_category, + i_brand, + cc_name + ORDER BY d_year, + d_moy) rn + FROM item, + catalog_sales, + date_dim, + call_center + WHERE cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND cc_call_center_sk= cs_call_center_sk + AND (d_year = 1999 + OR (d_year = 1999-1 + AND d_moy =12) + OR (d_year = 1999+1 + AND d_moy =1)) + GROUP BY i_category, + i_brand, + cc_name, + d_year, + d_moy), + v2 AS + (SELECT v1.i_category, + v1.i_brand, + v1.cc_name, + v1.d_year, + v1.d_moy, + v1.avg_monthly_sales, + v1.sum_sales, + v1_lag.sum_sales psum, + v1_lead.sum_sales nsum + FROM v1, + v1 v1_lag, + v1 v1_lead + WHERE v1.i_category = v1_lag.i_category + AND v1.i_category = v1_lead.i_category + AND v1.i_brand = v1_lag.i_brand + AND v1.i_brand = v1_lead.i_brand + AND v1. cc_name = v1_lag. cc_name + AND v1. cc_name = v1_lead. cc_name + AND v1.rn = v1_lag.rn + 1 + AND v1.rn = v1_lead.rn - 1) +SELECT * +FROM v2 +WHERE d_year = 1999 + AND avg_monthly_sales > 0 + AND CASE + WHEN avg_monthly_sales > 0 THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales NULLS FIRST, 1, 2, 3, 4, 5, 6, 7, 8, 9 +LIMIT 100; +---- +logical_plan +01)Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS FIRST, v2.i_category ASC NULLS LAST, v2.i_brand ASC NULLS LAST, v2.cc_name ASC NULLS LAST, v2.d_year ASC NULLS LAST, v2.d_moy ASC NULLS LAST, v2.psum ASC NULLS LAST, v2.nsum ASC NULLS LAST, fetch=100 +02)--SubqueryAlias: v2 +03)----Projection: v1.i_category, v1.i_brand, v1.cc_name, v1.d_year, v1.d_moy, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum +04)------Inner Join: v1.i_category = v1_lead.i_category, v1.i_brand = v1_lead.i_brand, v1.cc_name = v1_lead.cc_name, CAST(v1.rn AS Decimal128(21, 0)) = CAST(v1_lead.rn AS Decimal128(20, 0)) - Decimal128(1,20,0) +05)--------Projection: v1.i_category, v1.i_brand, v1.cc_name, v1.d_year, v1.d_moy, v1.sum_sales, v1.avg_monthly_sales, v1.rn, v1_lag.sum_sales +06)----------Inner Join: v1.i_category = v1_lag.i_category, v1.i_brand = v1_lag.i_brand, v1.cc_name = v1_lag.cc_name, CAST(v1.rn AS Decimal128(21, 0)) = CAST(v1_lag.rn AS Decimal128(20, 0)) + Decimal128(1,20,0) +07)------------SubqueryAlias: v1 +08)--------------Projection: item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price) AS sum_sales, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +09)----------------Filter: __common_expr_3 AND CASE WHEN __common_expr_3 THEN abs(sum(catalog_sales.cs_sales_price) - avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(NULL,32,10) END > Decimal128(0.1000000000,32,10) +10)------------------Projection: avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(0.000000,21,6) AS __common_expr_3, item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +11)--------------------WindowAggr: windowExpr=[[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +12)----------------------Filter: date_dim.d_year = Int64(1999) +13)------------------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +14)--------------------------Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] +15)----------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name +16)------------------------------Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk +17)--------------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy +18)----------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +19)------------------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price +20)--------------------------------------Inner Join: item.i_item_sk = catalog_sales.cs_item_sk +21)----------------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +22)----------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] +23)------------------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +24)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +25)--------------------------------TableScan: call_center projection=[cc_call_center_sk, cc_name] +26)------------SubqueryAlias: v1_lag +27)--------------SubqueryAlias: v1 +28)----------------Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +29)------------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +30)--------------------Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] +31)----------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name +32)------------------------Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk +33)--------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy +34)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +35)------------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price +36)--------------------------------Inner Join: item.i_item_sk = catalog_sales.cs_item_sk +37)----------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +38)----------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] +39)------------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +40)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +41)--------------------------TableScan: call_center projection=[cc_call_center_sk, cc_name] +42)--------SubqueryAlias: v1_lead +43)----------SubqueryAlias: v1 +44)------------Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn +45)--------------WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +46)----------------Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] +47)------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name +48)--------------------Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk +49)----------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy +50)------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +51)--------------------------Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price +52)----------------------------Inner Join: item.i_item_sk = catalog_sales.cs_item_sk +53)------------------------------TableScan: item projection=[i_item_sk, i_brand, i_category] +54)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] +55)--------------------------Filter: date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1) +56)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) AND date_dim.d_moy = Int64(1)] +57)----------------------TableScan: call_center projection=[cc_call_center_sk, cc_name] +physical_plan +01)SortPreservingMergeExec: [sum_sales@6 - avg_monthly_sales@5 ASC, i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST, psum@7 ASC NULLS LAST, nsum@8 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[sum_sales@6 - avg_monthly_sales@5 ASC, i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_moy@4 ASC NULLS LAST, psum@7 ASC NULLS LAST, nsum@8 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, avg_monthly_sales@5 as avg_monthly_sales, sum_sales@6 as sum_sales, sum_sales@7 as psum, sum_sales@8 as nsum] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (cc_name@2, cc_name@2), (CAST(v1.rn AS Decimal128(21, 0))@9, v1_lead.rn - Decimal128(1,20,0)@5)], projection=[i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4, avg_monthly_sales@6, sum_sales@5, sum_sales@8, sum_sales@13] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum_sales@5 as sum_sales, avg_monthly_sales@6 as avg_monthly_sales, rn@7 as rn, sum_sales@8 as sum_sales, CAST(rn@7 AS Decimal128(21, 0)) as CAST(v1.rn AS Decimal128(21, 0))] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (cc_name@2, cc_name@2), (CAST(v1.rn AS Decimal128(21, 0))@8, v1_lag.rn + Decimal128(1,20,0)@5)], projection=[i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4, sum_sales@5, avg_monthly_sales@6, rn@7, sum_sales@12] +08)--------------CoalescePartitionsExec +09)----------------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum(catalog_sales.cs_sales_price)@5 as sum_sales, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 as avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 AS Decimal128(21, 0)) as CAST(v1.rn AS Decimal128(21, 0))] +10)------------------FilterExec: __common_expr_3@0 AND CASE WHEN __common_expr_3@0 THEN abs(sum(catalog_sales.cs_sales_price)@6 - avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8) / avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8 END > 0.1000000000, projection=[i_category@1, i_brand@2, cc_name@3, d_year@4, d_moy@5, sum(catalog_sales.cs_sales_price)@6, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7] +11)--------------------ProjectionExec: expr=[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 > 0.000000 as __common_expr_3, i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum(catalog_sales.cs_sales_price)@5 as sum(catalog_sales.cs_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING] +12)----------------------WindowAggExec: wdw=[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +13)------------------------FilterExec: d_year@3 = 1999 +14)--------------------------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +15)----------------------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] +16)------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 4), input_partitions=4 +17)--------------------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +18)----------------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 4), input_partitions=4 +19)------------------------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +20)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cs_call_center_sk@2)], projection=[i_brand@2, i_category@3, cs_sales_price@5, d_year@6, d_moy@7, cc_name@1] +21)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk, cc_name], file_type=vortex +22)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@2)], projection=[i_brand@3, i_category@4, cs_call_center_sk@6, cs_sales_price@7, d_year@1, d_moy@2] +23)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +24)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] +25)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +26)--------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price], file_type=vortex +27)--------------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, sum(catalog_sales.cs_sales_price)@5 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Decimal128(20, 0)) + 1 as v1_lag.rn + Decimal128(1,20,0)] +28)----------------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +29)------------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] +30)--------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 4), input_partitions=4 +31)----------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +32)------------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 4), input_partitions=4 +33)--------------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +34)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cs_call_center_sk@2)], projection=[i_brand@2, i_category@3, cs_sales_price@5, d_year@6, d_moy@7, cc_name@1] +35)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk, cc_name], file_type=vortex +36)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@2)], projection=[i_brand@3, i_category@4, cs_call_center_sk@6, cs_sales_price@7, d_year@1, d_moy@2] +37)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +38)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] +39)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +40)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price], file_type=vortex +41)--------ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, sum(catalog_sales.cs_sales_price)@5 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Decimal128(20, 0)) - 1 as v1_lead.rn - Decimal128(1,20,0)] +42)----------BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +43)------------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] +44)--------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 4), input_partitions=4 +45)----------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +46)------------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 4), input_partitions=4 +47)--------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] +48)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cs_call_center_sk@2)], projection=[i_brand@2, i_category@3, cs_sales_price@5, d_year@6, d_moy@7, cc_name@1] +49)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk, cc_name], file_type=vortex +50)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@2)], projection=[i_brand@3, i_category@4, cs_call_center_sk@6, cs_sales_price@7, d_year@1, d_moy@2] +51)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 1999 OR d_year@6 = 1998 AND d_moy@8 = 12 OR d_year@6 = 2000 AND d_moy@8 = 1 +52)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] +53)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_category], file_type=vortex +54)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no new file mode 100644 index 00000000000..7e17f54dafc --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no @@ -0,0 +1,198 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss_items AS + (SELECT i_item_id item_id, + sum(ss_ext_sales_price) ss_item_rev + FROM store_sales, + item, + date_dim + WHERE ss_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND ss_sold_date_sk = d_date_sk + GROUP BY i_item_id), + cs_items AS + (SELECT i_item_id item_id, + sum(cs_ext_sales_price) cs_item_rev + FROM catalog_sales, + item, + date_dim + WHERE cs_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND cs_sold_date_sk = d_date_sk + GROUP BY i_item_id), + ws_items AS + (SELECT i_item_id item_id, + sum(ws_ext_sales_price) ws_item_rev + FROM web_sales, + item, + date_dim + WHERE ws_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND ws_sold_date_sk = d_date_sk + GROUP BY i_item_id) +SELECT ss_items.item_id, + ss_item_rev, + ss_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ss_dev, + cs_item_rev, + cs_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 cs_dev, + ws_item_rev, + ws_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ws_dev, + (ss_item_rev+cs_item_rev+ws_item_rev)/3 average +FROM ss_items, + cs_items, + ws_items +WHERE ss_items.item_id=cs_items.item_id + AND ss_items.item_id=ws_items.item_id + AND ss_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev + AND ss_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev + AND cs_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev + AND cs_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev + AND ws_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev + AND ws_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev +ORDER BY ss_items.item_id NULLS FIRST, + ss_item_rev NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: ss_items.item_id ASC NULLS FIRST, fetch=100 +02)--Projection: ss_items.item_id, ss_items.ss_item_rev, ss_items.ss_item_rev / __common_expr_4 * Decimal128(100,20,0) AS ss_dev, cs_items.cs_item_rev, cs_items.cs_item_rev / __common_expr_4 * Decimal128(100,20,0) AS cs_dev, ws_items.ws_item_rev, ws_items.ws_item_rev / __common_expr_4 * Decimal128(100,20,0) AS ws_dev, __common_expr_4 AS average +03)----Projection: (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Decimal128(3,20,0) AS __common_expr_4, ss_items.item_id, ss_items.ss_item_rev, cs_items.cs_item_rev, ws_items.ws_item_rev +04)------Inner Join: ss_items.item_id = ws_items.item_id Filter: CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) +05)--------Projection: ss_items.item_id, ss_items.ss_item_rev, cs_items.cs_item_rev +06)----------Inner Join: ss_items.item_id = cs_items.item_id Filter: CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) +07)------------SubqueryAlias: ss_items +08)--------------Projection: item.i_item_id AS item_id, sum(store_sales.ss_ext_sales_price) AS ss_item_rev +09)----------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +10)------------------Projection: store_sales.ss_ext_sales_price, item.i_item_id +11)--------------------LeftSemi Join: date_dim.d_date = __correlated_sq_1.d_date +12)----------------------Projection: store_sales.ss_ext_sales_price, item.i_item_id, date_dim.d_date +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_item_id +15)----------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +16)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +17)------------------------------TableScan: item projection=[i_item_sk, i_item_id] +18)--------------------------TableScan: date_dim projection=[d_date_sk, d_date] +19)----------------------SubqueryAlias: __correlated_sq_1 +20)------------------------Projection: date_dim.d_date +21)--------------------------Filter: date_dim.d_week_seq = () +22)----------------------------Subquery: +23)------------------------------Projection: date_dim.d_week_seq +24)--------------------------------Filter: date_dim.d_date = Date32("2000-01-03") +25)----------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-01-03")] +26)----------------------------TableScan: date_dim projection=[d_date, d_week_seq] +27)------------SubqueryAlias: cs_items +28)--------------Projection: item.i_item_id AS item_id, sum(catalog_sales.cs_ext_sales_price) AS cs_item_rev +29)----------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] +30)------------------Projection: catalog_sales.cs_ext_sales_price, item.i_item_id +31)--------------------LeftSemi Join: date_dim.d_date = __correlated_sq_2.d_date +32)----------------------Projection: catalog_sales.cs_ext_sales_price, item.i_item_id, date_dim.d_date +33)------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +34)--------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_item_id +35)----------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +36)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] +37)------------------------------TableScan: item projection=[i_item_sk, i_item_id] +38)--------------------------TableScan: date_dim projection=[d_date_sk, d_date] +39)----------------------SubqueryAlias: __correlated_sq_2 +40)------------------------Projection: date_dim.d_date +41)--------------------------Filter: date_dim.d_week_seq = () +42)----------------------------Subquery: +43)------------------------------Projection: date_dim.d_week_seq +44)--------------------------------Filter: date_dim.d_date = Date32("2000-01-03") +45)----------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-01-03")] +46)----------------------------TableScan: date_dim projection=[d_date, d_week_seq] +47)--------SubqueryAlias: ws_items +48)----------Projection: item.i_item_id AS item_id, sum(web_sales.ws_ext_sales_price) AS ws_item_rev +49)------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +50)--------------Projection: web_sales.ws_ext_sales_price, item.i_item_id +51)----------------LeftSemi Join: date_dim.d_date = __correlated_sq_3.d_date +52)------------------Projection: web_sales.ws_ext_sales_price, item.i_item_id, date_dim.d_date +53)--------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +54)----------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_item_id +55)------------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +56)--------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] +57)--------------------------TableScan: item projection=[i_item_sk, i_item_id] +58)----------------------TableScan: date_dim projection=[d_date_sk, d_date] +59)------------------SubqueryAlias: __correlated_sq_3 +60)--------------------Projection: date_dim.d_date +61)----------------------Filter: date_dim.d_week_seq = () +62)------------------------Subquery: +63)--------------------------Projection: date_dim.d_week_seq +64)----------------------------Filter: date_dim.d_date = Date32("2000-01-03") +65)------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-01-03")] +66)------------------------TableScan: date_dim projection=[d_date, d_week_seq] +physical_plan +01)ScalarSubqueryExec: subqueries=1 +02)--SortPreservingMergeExec: [item_id@0 ASC], fetch=100 +03)----SortExec: TopK(fetch=100), expr=[item_id@0 ASC], preserve_partitioning=[true] +04)------ProjectionExec: expr=[item_id@1 as item_id, ss_item_rev@2 as ss_item_rev, ss_item_rev@2 / __common_expr_4@0 * 100 as ss_dev, cs_item_rev@3 as cs_item_rev, cs_item_rev@3 / __common_expr_4@0 * 100 as cs_dev, ws_item_rev@4 as ws_item_rev, ws_item_rev@4 / __common_expr_4@0 * 100 as ws_dev, __common_expr_4@0 as average] +05)--------ProjectionExec: expr=[(ss_item_rev@0 + cs_item_rev@1 + ws_item_rev@2) / 3 as __common_expr_4, item_id@3 as item_id, ss_item_rev@0 as ss_item_rev, cs_item_rev@1 as cs_item_rev, ws_item_rev@2 as ws_item_rev] +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_id@0, item_id@0)], filter=CAST(ss_item_rev@0 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(ss_item_rev@0 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)), projection=[ss_item_rev@3, cs_item_rev@4, ws_item_rev@1, item_id@2] +07)------------CoalescePartitionsExec +08)--------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(web_sales.ws_ext_sales_price)@1 as ws_item_rev] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +10)------------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date@0, d_date@2)], projection=[ws_ext_sales_price@0, i_item_id@1] +13)------------------------CoalescePartitionsExec +14)--------------------------FilterExec: d_week_seq@1 = scalar_subquery(), projection=[d_date@0] +15)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +16)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex +17)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@2, d_date@4] +18)--------------------------CoalescePartitionsExec +19)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@2, ws_ext_sales_price@4, i_item_id@1] +20)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +21)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price], file_type=vortex +22)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +23)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +24)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_id@0, item_id@0)], filter=CAST(ss_item_rev@0 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(ss_item_rev@0 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)), projection=[item_id@2, ss_item_rev@3, cs_item_rev@1] +25)--------------CoalescePartitionsExec +26)----------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(catalog_sales.cs_ext_sales_price)@1 as cs_item_rev] +27)------------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +28)--------------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +29)----------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +30)------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date@0, d_date@2)], projection=[cs_ext_sales_price@0, i_item_id@1] +31)--------------------------CoalescePartitionsExec +32)----------------------------FilterExec: d_week_seq@1 = scalar_subquery(), projection=[d_date@0] +33)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +34)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex +35)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ext_sales_price@3, i_item_id@4, d_date@1] +36)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +37)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@2, cs_ext_sales_price@4, i_item_id@1] +38)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +39)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex +40)--------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(store_sales.ss_ext_sales_price)@1 as ss_item_rev] +41)----------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +42)------------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +43)--------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +44)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date@0, d_date@2)], projection=[ss_ext_sales_price@0, i_item_id@1] +45)------------------------CoalescePartitionsExec +46)--------------------------FilterExec: d_week_seq@1 = scalar_subquery(), projection=[d_date@0] +47)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +48)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex +49)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_ext_sales_price@3, i_item_id@4, d_date@1] +50)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +51)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@2, ss_ext_sales_price@4, i_item_id@1] +52)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +53)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex +54)--DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_date@2 = 2000-01-03 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no new file mode 100644 index 00000000000..4f2cf06f67c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no @@ -0,0 +1,159 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH wss AS + (SELECT d_week_seq, + ss_store_sk, + sum(CASE + WHEN (d_day_name='Sunday') THEN ss_sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN ss_sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN ss_sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN ss_sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN ss_sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN ss_sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN ss_sales_price + ELSE NULL + END) sat_sales + FROM store_sales, + date_dim + WHERE d_date_sk = ss_sold_date_sk + GROUP BY d_week_seq, + ss_store_sk) +SELECT s_store_name1, + s_store_id1, + d_week_seq1, + sun_sales1/sun_sales2 AS sun_sales_ratio, + mon_sales1/mon_sales2 AS mon_sales_ratio, + tue_sales1/tue_sales2 AS tue_sales_ratio, + wed_sales1/wed_sales2 AS wed_sales_ratio, + thu_sales1/thu_sales2 AS thu_sales_ratio, + fri_sales1/fri_sales2 AS fri_sales_ratio, + sat_sales1/sat_sales2 AS sat_sales_ratio +FROM + (SELECT s_store_name s_store_name1, + wss.d_week_seq d_week_seq1, + s_store_id s_store_id1, + sun_sales sun_sales1, + mon_sales mon_sales1, + tue_sales tue_sales1, + wed_sales wed_sales1, + thu_sales thu_sales1, + fri_sales fri_sales1, + sat_sales sat_sales1 + FROM wss, + store, + date_dim d + WHERE d.d_week_seq = wss.d_week_seq + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1212 AND 1212 + 11) y, + (SELECT s_store_name s_store_name2, + wss.d_week_seq d_week_seq2, + s_store_id s_store_id2, + sun_sales sun_sales2, + mon_sales mon_sales2, + tue_sales tue_sales2, + wed_sales wed_sales2, + thu_sales thu_sales2, + fri_sales fri_sales2, + sat_sales sat_sales2 + FROM wss, + store, + date_dim d + WHERE d.d_week_seq = wss.d_week_seq + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1212 + 12 AND 1212 + 23) x +WHERE s_store_id1=s_store_id2 + AND d_week_seq1=d_week_seq2-52 +ORDER BY s_store_name1 NULLS FIRST, + s_store_id1 NULLS FIRST, + d_week_seq1 NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: y.s_store_name1 ASC NULLS FIRST, y.s_store_id1 ASC NULLS FIRST, y.d_week_seq1 ASC NULLS FIRST, fetch=100 +02)--Projection: y.s_store_name1, y.s_store_id1, y.d_week_seq1, y.sun_sales1 / x.sun_sales2 AS sun_sales_ratio, y.mon_sales1 / x.mon_sales2 AS mon_sales_ratio, y.tue_sales1 / x.tue_sales2 AS tue_sales_ratio, y.wed_sales1 / x.wed_sales2 AS wed_sales_ratio, y.thu_sales1 / x.thu_sales2 AS thu_sales_ratio, y.fri_sales1 / x.fri_sales2 AS fri_sales_ratio, y.sat_sales1 / x.sat_sales2 AS sat_sales_ratio +03)----Inner Join: y.s_store_id1 = x.s_store_id2, y.d_week_seq1 = x.d_week_seq2 - Int64(52) +04)------SubqueryAlias: y +05)--------Projection: store.s_store_name AS s_store_name1, wss.d_week_seq AS d_week_seq1, store.s_store_id AS s_store_id1, wss.sun_sales AS sun_sales1, wss.mon_sales AS mon_sales1, wss.tue_sales AS tue_sales1, wss.wed_sales AS wed_sales1, wss.thu_sales AS thu_sales1, wss.fri_sales AS fri_sales1, wss.sat_sales AS sat_sales1 +06)----------Inner Join: wss.d_week_seq = d.d_week_seq +07)------------Projection: wss.d_week_seq, wss.sun_sales, wss.mon_sales, wss.tue_sales, wss.wed_sales, wss.thu_sales, wss.fri_sales, wss.sat_sales, store.s_store_id, store.s_store_name +08)--------------Inner Join: wss.ss_store_sk = store.s_store_sk +09)----------------SubqueryAlias: wss +10)------------------Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales +11)--------------------Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8View("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] +12)----------------------Projection: store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_week_seq, date_dim.d_day_name +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] +15)--------------------------TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] +16)----------------TableScan: store projection=[s_store_sk, s_store_id, s_store_name] +17)------------SubqueryAlias: d +18)--------------Projection: date_dim.d_week_seq +19)----------------Filter: date_dim.d_month_seq >= Int64(1212) AND date_dim.d_month_seq <= Int64(1223) +20)------------------TableScan: date_dim projection=[d_month_seq, d_week_seq], partial_filters=[date_dim.d_month_seq >= Int64(1212), date_dim.d_month_seq <= Int64(1223)] +21)------SubqueryAlias: x +22)--------Projection: wss.d_week_seq AS d_week_seq2, store.s_store_id AS s_store_id2, wss.sun_sales AS sun_sales2, wss.mon_sales AS mon_sales2, wss.tue_sales AS tue_sales2, wss.wed_sales AS wed_sales2, wss.thu_sales AS thu_sales2, wss.fri_sales AS fri_sales2, wss.sat_sales AS sat_sales2 +23)----------Inner Join: wss.d_week_seq = d.d_week_seq +24)------------Projection: wss.d_week_seq, wss.sun_sales, wss.mon_sales, wss.tue_sales, wss.wed_sales, wss.thu_sales, wss.fri_sales, wss.sat_sales, store.s_store_id +25)--------------Inner Join: wss.ss_store_sk = store.s_store_sk +26)----------------SubqueryAlias: wss +27)------------------Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales +28)--------------------Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8View("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8View("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(NULL,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] +29)----------------------Projection: store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_week_seq, date_dim.d_day_name +30)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +31)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] +32)--------------------------TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] +33)----------------TableScan: store projection=[s_store_sk, s_store_id] +34)------------SubqueryAlias: d +35)--------------Projection: date_dim.d_week_seq +36)----------------Filter: date_dim.d_month_seq >= Int64(1224) AND date_dim.d_month_seq <= Int64(1235) +37)------------------TableScan: date_dim projection=[d_month_seq, d_week_seq], partial_filters=[date_dim.d_month_seq >= Int64(1224), date_dim.d_month_seq <= Int64(1235)] +physical_plan +01)SortPreservingMergeExec: [s_store_name1@0 ASC, s_store_id1@1 ASC, d_week_seq1@2 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[s_store_name1@0 ASC, s_store_id1@1 ASC, d_week_seq1@2 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[s_store_name1@0 as s_store_name1, s_store_id1@1 as s_store_id1, d_week_seq1@2 as d_week_seq1, sun_sales1@3 / sun_sales2@4 as sun_sales_ratio, mon_sales1@5 / mon_sales2@6 as mon_sales_ratio, tue_sales1@7 / tue_sales2@8 as tue_sales_ratio, wed_sales1@9 / wed_sales2@10 as wed_sales_ratio, thu_sales1@11 / thu_sales2@12 as thu_sales_ratio, fri_sales1@13 / fri_sales2@14 as fri_sales_ratio, sat_sales1@15 / sat_sales2@16 as sat_sales_ratio] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_id1@2, s_store_id2@1), (d_week_seq1@1, x.d_week_seq2 - Int64(52)@9)], projection=[s_store_name1@0, s_store_id1@2, d_week_seq1@1, sun_sales1@3, sun_sales2@12, mon_sales1@4, mon_sales2@13, tue_sales1@5, tue_sales2@14, wed_sales1@6, wed_sales2@15, thu_sales1@7, thu_sales2@16, fri_sales1@8, fri_sales2@17, sat_sales1@9, sat_sales2@18] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[s_store_name@0 as s_store_name1, d_week_seq@1 as d_week_seq1, s_store_id@2 as s_store_id1, sun_sales@3 as sun_sales1, mon_sales@4 as mon_sales1, tue_sales@5 as tue_sales1, wed_sales@6 as wed_sales1, thu_sales@7 as thu_sales1, fri_sales@8 as fri_sales1, sat_sales@9 as sat_sales1] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[s_store_name@10, d_week_seq@1, s_store_id@9, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_month_seq@3 >= 1212 AND d_month_seq@3 <= 1223 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[d_week_seq@3, sun_sales@5, mon_sales@6, tue_sales@7, wed_sales@8, thu_sales@9, fri_sales@10, sat_sales@11, s_store_id@1, s_store_name@2] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id, s_store_name], file_type=vortex +11)----------------ProjectionExec: expr=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] +12)------------------AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +13)--------------------RepartitionExec: partitioning=Hash([d_week_seq@0, ss_store_sk@1], 4), input_partitions=4 +14)----------------------AggregateExec: mode=Partial, gby=[d_week_seq@2 as d_week_seq, ss_store_sk@0 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +15)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_store_sk@4, ss_sales_price@5, d_week_seq@1, d_day_name@2] +16)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex +17)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price], file_type=vortex +18)--------ProjectionExec: expr=[d_week_seq@0 as d_week_seq2, s_store_id@1 as s_store_id2, sun_sales@2 as sun_sales2, mon_sales@3 as mon_sales2, tue_sales@4 as tue_sales2, wed_sales@5 as wed_sales2, thu_sales@6 as thu_sales2, fri_sales@7 as fri_sales2, sat_sales@8 as sat_sales2, d_week_seq@0 - 52 as x.d_week_seq2 - Int64(52)] +19)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@1, s_store_id@9, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8] +20)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_month_seq@3 >= 1224 AND d_month_seq@3 <= 1235 +21)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[d_week_seq@2, sun_sales@4, mon_sales@5, tue_sales@6, wed_sales@7, thu_sales@8, fri_sales@9, sat_sales@10, s_store_id@1] +22)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id], file_type=vortex +23)--------------ProjectionExec: expr=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] +24)----------------AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +25)------------------RepartitionExec: partitioning=Hash([d_week_seq@0, ss_store_sk@1], 4), input_partitions=4 +26)--------------------AggregateExec: mode=Partial, gby=[d_week_seq@2 as d_week_seq, ss_store_sk@0 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Sunday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Monday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Tuesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Wednesday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Thursday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Friday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Saturday THEN store_sales.ss_sales_price ELSE NULL END) as sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] +27)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_store_sk@4, ss_sales_price@5, d_week_seq@1, d_day_name@2] +28)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex +29)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no new file mode 100644 index 00000000000..f382d5f0b0c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no @@ -0,0 +1,103 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT a.ca_state state, + count(*) cnt +FROM customer_address a , + customer c , + store_sales s , + date_dim d , + item i +WHERE a.ca_address_sk = c.c_current_addr_sk + AND c.c_customer_sk = s.ss_customer_sk + AND s.ss_sold_date_sk = d.d_date_sk + AND s.ss_item_sk = i.i_item_sk + AND d.d_month_seq = + (SELECT DISTINCT (d_month_seq) + FROM date_dim + WHERE d_year = 2001 + AND d_moy = 1 ) + AND i.i_current_price > 1.2 * + (SELECT avg(j.i_current_price) + FROM item j + WHERE j.i_category = i.i_category) +GROUP BY a.ca_state +HAVING count(*) >= 10 +ORDER BY cnt NULLS FIRST, + a.ca_state NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: cnt ASC NULLS FIRST, state ASC NULLS FIRST, fetch=100 +02)--Projection: a.ca_state AS state, count(Int64(1)) AS count(*) AS cnt +03)----Filter: count(Int64(1)) >= Int64(10) +04)------Aggregate: groupBy=[[a.ca_state]], aggr=[[count(Int64(1))]] +05)--------Projection: a.ca_state +06)----------LeftSemi Join: i.i_category = __scalar_sq_1.i_category Filter: CAST(i.i_current_price AS Decimal128(30, 15)) > CAST(Float64(1.2) * __scalar_sq_1.avg(j.i_current_price) AS Decimal128(30, 15)) +07)------------Projection: a.ca_state, i.i_current_price, i.i_category +08)--------------Inner Join: s.ss_item_sk = i.i_item_sk +09)----------------Projection: a.ca_state, s.ss_item_sk +10)------------------Inner Join: s.ss_sold_date_sk = d.d_date_sk +11)--------------------Projection: a.ca_state, s.ss_sold_date_sk, s.ss_item_sk +12)----------------------Inner Join: c.c_customer_sk = s.ss_customer_sk +13)------------------------Projection: a.ca_state, c.c_customer_sk +14)--------------------------Inner Join: a.ca_address_sk = c.c_current_addr_sk +15)----------------------------SubqueryAlias: a +16)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +17)----------------------------SubqueryAlias: c +18)------------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +19)------------------------SubqueryAlias: s +20)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] +21)--------------------SubqueryAlias: d +22)----------------------Projection: date_dim.d_date_sk +23)------------------------Filter: date_dim.d_month_seq = () +24)--------------------------Subquery: +25)----------------------------Aggregate: groupBy=[[date_dim.d_month_seq]], aggr=[[]] +26)------------------------------Projection: date_dim.d_month_seq +27)--------------------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy = Int64(1) +28)----------------------------------TableScan: date_dim projection=[d_month_seq, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(1)] +29)--------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq] +30)----------------SubqueryAlias: i +31)------------------TableScan: item projection=[i_item_sk, i_current_price, i_category] +32)------------SubqueryAlias: __scalar_sq_1 +33)--------------Projection: CAST(avg(j.i_current_price) AS Float64), j.i_category +34)----------------Aggregate: groupBy=[[j.i_category]], aggr=[[avg(j.i_current_price)]] +35)------------------SubqueryAlias: j +36)--------------------TableScan: item projection=[i_current_price, i_category] +physical_plan +01)ScalarSubqueryExec: subqueries=1 +02)--SortPreservingMergeExec: [cnt@1 ASC, state@0 ASC], fetch=100 +03)----ProjectionExec: expr=[ca_state@0 as state, count(Int64(1))@1 as cnt] +04)------SortExec: TopK(fetch=100), expr=[count(Int64(1))@1 ASC, ca_state@0 ASC], preserve_partitioning=[true] +05)--------FilterExec: count(Int64(1))@1 >= 10 +06)----------AggregateExec: mode=FinalPartitioned, gby=[ca_state@0 as ca_state], aggr=[count(Int64(1))] +07)------------RepartitionExec: partitioning=Hash([ca_state@0], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[ca_state@0 as ca_state], aggr=[count(Int64(1))] +09)----------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_category@1, i_category@2)], filter=CAST(i_current_price@0 AS Decimal128(30, 15)) > CAST(1.2 * avg(j.i_current_price)@1 AS Decimal128(30, 15)), projection=[ca_state@0] +10)------------------CoalescePartitionsExec +11)--------------------ProjectionExec: expr=[CAST(avg(j.i_current_price)@1 AS Float64) as avg(j.i_current_price), i_category@0 as i_category] +12)----------------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category], aggr=[avg(j.i_current_price)] +13)------------------------RepartitionExec: partitioning=Hash([i_category@0], 4), input_partitions=1 +14)--------------------------AggregateExec: mode=Partial, gby=[i_category@1 as i_category], aggr=[avg(j.i_current_price)] +15)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_current_price, i_category], file_type=vortex +16)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ca_state@3, i_current_price@1, i_category@2] +17)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_current_price, i_category], file_type=vortex +18)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@1)], projection=[ca_state@1, ss_item_sk@3] +19)----------------------CoalescePartitionsExec +20)------------------------FilterExec: d_month_seq@1 = scalar_subquery(), projection=[d_date_sk@0] +21)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_month_seq], file_type=vortex +23)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@1, ss_customer_sk@2)], projection=[ca_state@0, ss_sold_date_sk@2, ss_item_sk@3] +24)------------------------CoalescePartitionsExec +25)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@1)], projection=[ca_state@1, c_customer_sk@2] +26)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex +27)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +28)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +29)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk], file_type=vortex +30)--AggregateExec: mode=FinalPartitioned, gby=[d_month_seq@0 as d_month_seq], aggr=[] +31)----RepartitionExec: partitioning=Hash([d_month_seq@0], 4), input_partitions=4 +32)------AggregateExec: mode=Partial, gby=[d_month_seq@0 as d_month_seq], aggr=[] +33)--------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +34)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_month_seq], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 = 1 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no new file mode 100644 index 00000000000..d13cf51cb05 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no @@ -0,0 +1,194 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss AS + (SELECT i_item_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category ='Music') + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + cs AS + (SELECT i_item_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category ='Music') + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + ws AS + (SELECT i_item_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category = 'Music') + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id) +SELECT i_item_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_item_id +ORDER BY i_item_id, + total_sales +LIMIT 100; +---- +logical_plan +01)Sort: tmp1.i_item_id ASC NULLS LAST, fetch=100 +02)--Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales +03)----Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] +04)------SubqueryAlias: tmp1 +05)--------Union +06)----------SubqueryAlias: ss +07)------------Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales +08)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +09)----------------LeftSemi Join: item.i_item_id = __correlated_sq_1.i_item_id +10)------------------Projection: store_sales.ss_ext_sales_price, item.i_item_id +11)--------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +13)------------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +14)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price +15)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(9) +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(9)] +20)--------------------------Projection: customer_address.ca_address_sk +21)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +22)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +23)----------------------TableScan: item projection=[i_item_sk, i_item_id] +24)------------------SubqueryAlias: __correlated_sq_1 +25)--------------------Projection: item.i_item_id +26)----------------------Filter: item.i_category = Utf8View("Music") +27)------------------------TableScan: item projection=[i_item_id, i_category], partial_filters=[item.i_category = Utf8View("Music")] +28)----------SubqueryAlias: cs +29)------------Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales +30)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] +31)----------------LeftSemi Join: item.i_item_id = __correlated_sq_2.i_item_id +32)------------------Projection: catalog_sales.cs_ext_sales_price, item.i_item_id +33)--------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +34)----------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +35)------------------------Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk +36)--------------------------Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +37)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +38)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] +39)------------------------------Projection: date_dim.d_date_sk +40)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(9) +41)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(9)] +42)--------------------------Projection: customer_address.ca_address_sk +43)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +44)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +45)----------------------TableScan: item projection=[i_item_sk, i_item_id] +46)------------------SubqueryAlias: __correlated_sq_2 +47)--------------------Projection: item.i_item_id +48)----------------------Filter: item.i_category = Utf8View("Music") +49)------------------------TableScan: item projection=[i_item_id, i_category], partial_filters=[item.i_category = Utf8View("Music")] +50)----------SubqueryAlias: ws +51)------------Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales +52)--------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] +53)----------------LeftSemi Join: item.i_item_id = __correlated_sq_3.i_item_id +54)------------------Projection: web_sales.ws_ext_sales_price, item.i_item_id +55)--------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +56)----------------------Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price +57)------------------------Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk +58)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price +59)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +60)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] +61)------------------------------Projection: date_dim.d_date_sk +62)--------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(9) +63)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(9)] +64)--------------------------Projection: customer_address.ca_address_sk +65)----------------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +66)------------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +67)----------------------TableScan: item projection=[i_item_sk, i_item_id] +68)------------------SubqueryAlias: __correlated_sq_3 +69)--------------------Projection: item.i_item_id +70)----------------------Filter: item.i_category = Utf8View("Music") +71)------------------------TableScan: item projection=[i_item_id, i_category], partial_filters=[item.i_category = Utf8View("Music")] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(tmp1.total_sales)@1 as total_sales] +03)----SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=SinglePartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(tmp1.total_sales)] +05)--------InterleaveExec +06)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_category@12 = Music +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@3, i_item_id@1] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_item_sk@1, ss_ext_sales_price@3] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_addr_sk@3, ss_ext_sales_price@4] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 9 +18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price], file_type=vortex +19)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] +20)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +21)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +22)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] +23)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +24)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_category@12 = Music +25)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +26)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@3] +27)------------------------CoalescePartitionsExec +28)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, cs_bill_addr_sk@0)], projection=[cs_item_sk@2, cs_ext_sales_price@3] +29)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +30)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_addr_sk@2, cs_item_sk@3, cs_ext_sales_price@4] +31)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 9 +32)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex +33)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +34)----------ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] +35)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +36)--------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +37)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] +38)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(i_item_id@0, i_item_id@1)] +39)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_id], file_type=vortex, predicate: i_category@12 = Music +40)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +41)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@3] +42)------------------------CoalescePartitionsExec +43)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ws_bill_addr_sk@1)], projection=[ws_item_sk@1, ws_ext_sales_price@3] +44)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +45)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_bill_addr_sk@3, ws_ext_sales_price@4] +46)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 9 +47)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price], file_type=vortex +48)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no new file mode 100644 index 00000000000..9222018d05b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no @@ -0,0 +1,155 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT promotions, + total, + cast(promotions AS decimal(15,4))/cast(total AS decimal(15,4))*100 +FROM + (SELECT sum(ss_ext_sales_price) promotions + FROM store_sales, + store, + promotion, + date_dim, + customer, + customer_address, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND ss_promo_sk = p_promo_sk + AND ss_customer_sk= c_customer_sk + AND ca_address_sk = c_current_addr_sk + AND ss_item_sk = i_item_sk + AND ca_gmt_offset = -5 + AND i_category = 'Jewelry' + AND (p_channel_dmail = 'Y' + OR p_channel_email = 'Y' + OR p_channel_tv = 'Y') + AND s_gmt_offset = -5 + AND d_year = 1998 + AND d_moy = 11) promotional_sales, + (SELECT sum(ss_ext_sales_price) total + FROM store_sales, + store, + date_dim, + customer, + customer_address, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND ss_customer_sk= c_customer_sk + AND ca_address_sk = c_current_addr_sk + AND ss_item_sk = i_item_sk + AND ca_gmt_offset = -5 + AND i_category = 'Jewelry' + AND s_gmt_offset = -5 + AND d_year = 1998 + AND d_moy = 11) all_sales +ORDER BY promotions, + total +LIMIT 100; +---- +logical_plan +01)Sort: promotional_sales.promotions ASC NULLS LAST, all_sales.total ASC NULLS LAST, fetch=100 +02)--Projection: promotional_sales.promotions, all_sales.total, CAST(promotional_sales.promotions AS Decimal128(15, 4)) / CAST(all_sales.total AS Decimal128(15, 4)) * Decimal128(100,20,0) AS promotional_sales.promotions / all_sales.total * Int64(100) +03)----Cross Join: +04)------SubqueryAlias: promotional_sales +05)--------Projection: sum(store_sales.ss_ext_sales_price) AS promotions +06)----------Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +07)------------Projection: store_sales.ss_ext_sales_price +08)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +09)----------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +10)------------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +11)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price, customer.c_current_addr_sk +12)----------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +13)------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price +14)--------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +15)----------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price +16)------------------------------Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk +17)--------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price +18)----------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +19)------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_promo_sk, ss_ext_sales_price] +20)------------------------------------Projection: store.s_store_sk +21)--------------------------------------Filter: store.s_gmt_offset = Decimal128(-5.00,5,2) +22)----------------------------------------TableScan: store projection=[s_store_sk, s_gmt_offset], partial_filters=[store.s_gmt_offset = Decimal128(-5.00,5,2)] +23)--------------------------------Projection: promotion.p_promo_sk +24)----------------------------------Filter: promotion.p_channel_dmail = Utf8View("Y") OR promotion.p_channel_email = Utf8View("Y") OR promotion.p_channel_tv = Utf8View("Y") +25)------------------------------------TableScan: promotion projection=[p_promo_sk, p_channel_dmail, p_channel_email, p_channel_tv], partial_filters=[promotion.p_channel_dmail = Utf8View("Y") OR promotion.p_channel_email = Utf8View("Y") OR promotion.p_channel_tv = Utf8View("Y")] +26)----------------------------Projection: date_dim.d_date_sk +27)------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(11) +28)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(11)] +29)------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +30)--------------------Projection: customer_address.ca_address_sk +31)----------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +32)------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +33)----------------Projection: item.i_item_sk +34)------------------Filter: item.i_category = Utf8View("Jewelry") +35)--------------------TableScan: item projection=[i_item_sk, i_category], partial_filters=[item.i_category = Utf8View("Jewelry")] +36)------SubqueryAlias: all_sales +37)--------Projection: sum(store_sales.ss_ext_sales_price) AS total +38)----------Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +39)------------Projection: store_sales.ss_ext_sales_price +40)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +41)----------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price +42)------------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +43)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price, customer.c_current_addr_sk +44)----------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +45)------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price +46)--------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +47)----------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price +48)------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +49)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] +50)--------------------------------Projection: store.s_store_sk +51)----------------------------------Filter: store.s_gmt_offset = Decimal128(-5.00,5,2) +52)------------------------------------TableScan: store projection=[s_store_sk, s_gmt_offset], partial_filters=[store.s_gmt_offset = Decimal128(-5.00,5,2)] +53)----------------------------Projection: date_dim.d_date_sk +54)------------------------------Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(11) +55)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(11)] +56)------------------------TableScan: customer projection=[c_customer_sk, c_current_addr_sk] +57)--------------------Projection: customer_address.ca_address_sk +58)----------------------Filter: customer_address.ca_gmt_offset = Decimal128(-5.00,5,2) +59)------------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-5.00,5,2)] +60)----------------Projection: item.i_item_sk +61)------------------Filter: item.i_category = Utf8View("Jewelry") +62)--------------------TableScan: item projection=[i_item_sk, i_category], partial_filters=[item.i_category = Utf8View("Jewelry")] +physical_plan +01)SortExec: TopK(fetch=100), expr=[total@1 ASC NULLS LAST], preserve_partitioning=[false] +02)--ProjectionExec: expr=[promotions@0 as promotions, total@1 as total, CAST(promotions@0 AS Decimal128(15, 4)) / CAST(total@1 AS Decimal128(15, 4)) * 100 as promotional_sales.promotions / all_sales.total * Int64(100)] +03)----CrossJoinExec +04)------ProjectionExec: expr=[sum(store_sales.ss_ext_sales_price)@0 as promotions] +05)--------AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] +06)----------CoalescePartitionsExec +07)------------AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@2] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_category@12 = Jewelry +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], projection=[ss_item_sk@1, ss_ext_sales_price@2] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2, c_current_addr_sk@4] +13)--------------------CoalescePartitionsExec +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_ext_sales_price@4] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 11 +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ss_promo_sk@3)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_customer_sk@3, ss_ext_sales_price@5] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_dmail@8 = Y OR p_channel_email@9 = Y OR p_channel_tv@11 = Y +18)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_customer_sk@3, ss_promo_sk@5, ss_ext_sales_price@6] +19)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_gmt_offset@27 = -5.00 +20)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_promo_sk, ss_ext_sales_price], file_type=vortex +21)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex +23)------ProjectionExec: expr=[sum(store_sales.ss_ext_sales_price)@0 as total] +24)--------AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] +25)----------CoalescePartitionsExec +26)------------AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] +27)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_ext_sales_price@2] +28)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_category@12 = Jewelry +29)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], projection=[ss_item_sk@1, ss_ext_sales_price@2] +30)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -5.00 +31)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2, c_current_addr_sk@4] +32)--------------------CoalescePartitionsExec +33)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_ext_sales_price@4] +34)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 1998 AND d_moy@8 = 11 +35)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_customer_sk@3, ss_ext_sales_price@5] +36)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_gmt_offset@27 = -5.00 +37)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price], file_type=vortex +38)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +39)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q62.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q62.slt.no new file mode 100644 index 00000000000..74f495e3565 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q62.slt.no @@ -0,0 +1,89 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT w_substr, + sm_type, + web_name, + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 30) + AND (ws_ship_date_sk - ws_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 60) + AND (ws_ship_date_sk - ws_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 90) + AND (ws_ship_date_sk - ws_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM web_sales, + (SELECT SUBSTRING(w_warehouse_name,1,20) w_substr, + * + FROM warehouse) sq1, + ship_mode, + web_site, + date_dim +WHERE d_month_seq BETWEEN 1200 AND 1200 + 11 + AND ws_ship_date_sk = d_date_sk + AND ws_warehouse_sk = w_warehouse_sk + AND ws_ship_mode_sk = sm_ship_mode_sk + AND ws_web_site_sk = web_site_sk +GROUP BY w_substr, + sm_type, + web_name +ORDER BY 1 NULLS FIRST, + 2 NULLS FIRST, + 3 NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sq1.w_substr ASC NULLS FIRST, ship_mode.sm_type ASC NULLS FIRST, web_site.web_name ASC NULLS FIRST, fetch=100 +02)--Projection: sq1.w_substr, ship_mode.sm_type, web_site.web_name, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days +03)----Aggregate: groupBy=[[sq1.w_substr, ship_mode.sm_type, web_site.web_name]], aggr=[[sum(CASE WHEN __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] +04)------Projection: web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk AS __common_expr_1, sq1.w_substr, ship_mode.sm_type, web_site.web_name +05)--------Inner Join: web_sales.ws_ship_date_sk = date_dim.d_date_sk +06)----------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, sq1.w_substr, ship_mode.sm_type, web_site.web_name +07)------------Inner Join: web_sales.ws_web_site_sk = web_site.web_site_sk +08)--------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, web_sales.ws_web_site_sk, sq1.w_substr, ship_mode.sm_type +09)----------------Inner Join: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk +10)------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, sq1.w_substr +11)--------------------Inner Join: web_sales.ws_warehouse_sk = sq1.w_warehouse_sk +12)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_ship_date_sk, ws_web_site_sk, ws_ship_mode_sk, ws_warehouse_sk] +13)----------------------SubqueryAlias: sq1 +14)------------------------Projection: substr(warehouse.w_warehouse_name, Int64(1), Int64(20)) AS w_substr, warehouse.w_warehouse_sk +15)--------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +16)------------------TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] +17)--------------TableScan: web_site projection=[web_site_sk, web_name] +18)----------Projection: date_dim.d_date_sk +19)------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +20)--------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +physical_plan +01)SortPreservingMergeExec: [w_substr@0 ASC, sm_type@1 ASC, web_name@2 ASC], fetch=100 +02)--ProjectionExec: expr=[w_substr@0 as w_substr, sm_type@1 as sm_type, web_name@2 as web_name, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@3 as 30 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@4 as 31-60 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@5 as 61-90 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@6 as 91-120 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@7 as >120 days] +03)----SortExec: TopK(fetch=100), expr=[w_substr@0 ASC, sm_type@1 ASC, web_name@2 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[w_substr@0 as w_substr, sm_type@1 as sm_type, web_name@2 as web_name], aggr=[sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +05)--------RepartitionExec: partitioning=Hash([w_substr@0, sm_type@1, web_name@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[w_substr@1 as w_substr, sm_type@2 as sm_type, web_name@3 as web_name], aggr=[sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +07)------------ProjectionExec: expr=[ws_ship_date_sk@0 - ws_sold_date_sk@1 as __common_expr_1, w_substr@2 as w_substr, sm_type@3 as sm_type, web_name@4 as web_name] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_ship_date_sk@1)], projection=[ws_ship_date_sk@2, ws_sold_date_sk@1, w_substr@3, sm_type@4, web_name@5] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(web_site_sk@0, ws_web_site_sk@2)], projection=[ws_sold_date_sk@2, ws_ship_date_sk@3, w_substr@5, sm_type@6, web_name@1] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_site.vortex]]}, projection=[web_site_sk, web_name], file_type=vortex +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sm_ship_mode_sk@0, ws_ship_mode_sk@3)], projection=[ws_sold_date_sk@2, ws_ship_date_sk@3, ws_web_site_sk@4, w_substr@6, sm_type@1] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/ship_mode.vortex]]}, projection=[sm_ship_mode_sk, sm_type], file_type=vortex +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@1, ws_warehouse_sk@4)], projection=[ws_sold_date_sk@2, ws_ship_date_sk@3, ws_web_site_sk@4, ws_ship_mode_sk@5, w_substr@0] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[substr(w_warehouse_name@2, 1, 20) as w_substr, w_warehouse_sk], file_type=vortex +16)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_ship_date_sk, ws_web_site_sk, ws_ship_mode_sk, ws_warehouse_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q63.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q63.slt.no new file mode 100644 index 00000000000..8ed01afd7fe --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q63.slt.no @@ -0,0 +1,94 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT i_manager_id, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_manager_id) avg_monthly_sales + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_month_seq IN (1200, + 1200+1, + 1200+2, + 1200+3, + 1200+4, + 1200+5, + 1200+6, + 1200+7, + 1200+8, + 1200+9, + 1200+10, + 1200+11) + AND ((i_category IN ('Books', + 'Children', + 'Electronics') + AND i_class IN ('personal', + 'portable', + 'reference', + 'self-help') + AND i_brand IN ('scholaramalgamalg #14', + 'scholaramalgamalg #7', + 'exportiunivamalg #9', + 'scholaramalgamalg #9')) or(i_category IN ('Women','Music','Men') + AND i_class IN ('accessories','classical','fragrances','pants') + AND i_brand IN ('amalgimporto #1','edu packscholar #1','exportiimporto #1', 'importoamalg #1'))) + GROUP BY i_manager_id, + d_moy) tmp1 +WHERE CASE + WHEN avg_monthly_sales > 0 THEN ABS (sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY i_manager_id, + avg_monthly_sales, + sum_sales +LIMIT 100; +---- +logical_plan +01)Sort: tmp1.i_manager_id ASC NULLS LAST, tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, fetch=100 +02)--SubqueryAlias: tmp1 +03)----Projection: item.i_manager_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales +04)------Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(0.000000,21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(NULL,32,10) END > Decimal128(0.1000000000,32,10) +05)--------WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +06)----------Projection: item.i_manager_id, sum(store_sales.ss_sales_price) +07)------------Aggregate: groupBy=[[item.i_manager_id, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] +08)--------------Projection: item.i_manager_id, store_sales.ss_sales_price, date_dim.d_moy +09)----------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +10)------------------Projection: item.i_manager_id, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_moy +11)--------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +12)----------------------Projection: item.i_manager_id, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +13)------------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +14)--------------------------Projection: item.i_item_sk, item.i_manager_id +15)----------------------------Filter: (item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Children") OR item.i_category = Utf8View("Electronics")) AND item.i_class IN ([Utf8View("personal"), Utf8View("portable"), Utf8View("reference"), Utf8View("self-help")]) AND item.i_brand IN ([Utf8View("scholaramalgamalg #14"), Utf8View("scholaramalgamalg #7"), Utf8View("exportiunivamalg #9"), Utf8View("scholaramalgamalg #9")]) OR (item.i_category = Utf8View("Women") OR item.i_category = Utf8View("Music") OR item.i_category = Utf8View("Men")) AND item.i_class IN ([Utf8View("accessories"), Utf8View("classical"), Utf8View("fragrances"), Utf8View("pants")]) AND item.i_brand IN ([Utf8View("amalgimporto #1"), Utf8View("edu packscholar #1"), Utf8View("exportiimporto #1"), Utf8View("importoamalg #1")]) +16)------------------------------TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_manager_id], partial_filters=[(item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Children") OR item.i_category = Utf8View("Electronics")) AND item.i_class IN ([Utf8View("personal"), Utf8View("portable"), Utf8View("reference"), Utf8View("self-help")]) AND item.i_brand IN ([Utf8View("scholaramalgamalg #14"), Utf8View("scholaramalgamalg #7"), Utf8View("exportiunivamalg #9"), Utf8View("scholaramalgamalg #9")]) OR (item.i_category = Utf8View("Women") OR item.i_category = Utf8View("Music") OR item.i_category = Utf8View("Men")) AND item.i_class IN ([Utf8View("accessories"), Utf8View("classical"), Utf8View("fragrances"), Utf8View("pants")]) AND item.i_brand IN ([Utf8View("amalgimporto #1"), Utf8View("edu packscholar #1"), Utf8View("exportiimporto #1"), Utf8View("importoamalg #1")])] +17)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +18)----------------------Projection: date_dim.d_date_sk, date_dim.d_moy +19)------------------------Filter: date_dim.d_month_seq IN ([Int64(1200), Int64(1201), Int64(1202), Int64(1203), Int64(1204), Int64(1205), Int64(1206), Int64(1207), Int64(1208), Int64(1209), Int64(1210), Int64(1211)]) +20)--------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq, d_moy], partial_filters=[date_dim.d_month_seq IN ([Int64(1200), Int64(1201), Int64(1202), Int64(1203), Int64(1204), Int64(1205), Int64(1206), Int64(1207), Int64(1208), Int64(1209), Int64(1210), Int64(1211)])] +21)------------------TableScan: store projection=[s_store_sk] +physical_plan +01)SortPreservingMergeExec: [i_manager_id@0 ASC NULLS LAST, avg_monthly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_manager_id@0 as i_manager_id, sum(store_sales.ss_sales_price)@1 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 as avg_monthly_sales] +03)----SortExec: TopK(fetch=100), expr=[i_manager_id@0 ASC NULLS LAST, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 ASC NULLS LAST, sum(store_sales.ss_sales_price)@1 ASC NULLS LAST], preserve_partitioning=[true], sort_prefix=[i_manager_id@0 ASC NULLS LAST, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 ASC NULLS LAST] +04)------FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 > 0.000000 THEN abs(sum(store_sales.ss_sales_price)@1 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 END > 0.1000000000 +05)--------WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +06)----------SortExec: expr=[i_manager_id@0 ASC NULLS LAST], preserve_partitioning=[true] +07)------------RepartitionExec: partitioning=Hash([i_manager_id@0], 4), input_partitions=4 +08)--------------ProjectionExec: expr=[i_manager_id@0 as i_manager_id, sum(store_sales.ss_sales_price)@2 as sum(store_sales.ss_sales_price)] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[i_manager_id@0 as i_manager_id, d_moy@1 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +10)------------------RepartitionExec: partitioning=Hash([i_manager_id@0, d_moy@1], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[i_manager_id@0 as i_manager_id, d_moy@2 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[i_manager_id@1, ss_sales_price@3, d_moy@4] +13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@1)], projection=[i_manager_id@2, ss_store_sk@4, ss_sales_price@5, d_moy@1] +15)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_moy], file_type=vortex, predicate: d_month_seq@3 IN (SET) ([1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211]) +16)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_manager_id@1, ss_sold_date_sk@2, ss_store_sk@4, ss_sales_price@5] +17)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manager_id], file_type=vortex, predicate: (i_category@12 = Books OR i_category@12 = Children OR i_category@12 = Electronics) AND i_class@10 IN (SET) ([personal, portable, reference, self-help]) AND i_brand@8 IN (SET) ([scholaramalgamalg #14, scholaramalgamalg #7, exportiunivamalg #9, scholaramalgamalg #9]) OR (i_category@12 = Women OR i_category@12 = Music OR i_category@12 = Men) AND i_class@10 IN (SET) ([accessories, classical, fragrances, pants]) AND i_brand@8 IN (SET) ([amalgimporto #1, edu packscholar #1, exportiimporto #1, importoamalg #1]) +18)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no new file mode 100644 index 00000000000..021307f1aec --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no @@ -0,0 +1,402 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH cs_ui AS + (SELECT cs_item_sk, + sum(cs_ext_list_price) AS sale, + sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) AS refund + FROM catalog_sales, + catalog_returns + WHERE cs_item_sk = cr_item_sk + AND cs_order_number = cr_order_number + GROUP BY cs_item_sk + HAVING sum(cs_ext_list_price)>2*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)), + cross_sales AS + (SELECT i_product_name product_name, + i_item_sk item_sk, + s_store_name store_name, + s_zip store_zip, + ad1.ca_street_number b_street_number, + ad1.ca_street_name b_street_name, + ad1.ca_city b_city, + ad1.ca_zip b_zip, + ad2.ca_street_number c_street_number, + ad2.ca_street_name c_street_name, + ad2.ca_city c_city, + ad2.ca_zip c_zip, + d1.d_year AS syear, + d2.d_year AS fsyear, + d3.d_year s2year, + count(*) cnt, + sum(ss_wholesale_cost) s1, + sum(ss_list_price) s2, + sum(ss_coupon_amt) s3 + FROM store_sales, + store_returns, + cs_ui, + date_dim d1, + date_dim d2, + date_dim d3, + store, + customer, + customer_demographics cd1, + customer_demographics cd2, + promotion, + household_demographics hd1, + household_demographics hd2, + customer_address ad1, + customer_address ad2, + income_band ib1, + income_band ib2, + item + WHERE ss_store_sk = s_store_sk + AND ss_sold_date_sk = d1.d_date_sk + AND ss_customer_sk = c_customer_sk + AND ss_cdemo_sk= cd1.cd_demo_sk + AND ss_hdemo_sk = hd1.hd_demo_sk + AND ss_addr_sk = ad1.ca_address_sk + AND ss_item_sk = i_item_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND ss_item_sk = cs_ui.cs_item_sk + AND c_current_cdemo_sk = cd2.cd_demo_sk + AND c_current_hdemo_sk = hd2.hd_demo_sk + AND c_current_addr_sk = ad2.ca_address_sk + AND c_first_sales_date_sk = d2.d_date_sk + AND c_first_shipto_date_sk = d3.d_date_sk + AND ss_promo_sk = p_promo_sk + AND hd1.hd_income_band_sk = ib1.ib_income_band_sk + AND hd2.hd_income_band_sk = ib2.ib_income_band_sk + AND cd1.cd_marital_status <> cd2.cd_marital_status + AND i_color IN ('purple', + 'burlywood', + 'indian', + 'spring', + 'floral', + 'medium') + AND i_current_price BETWEEN 64 AND 64 + 10 + AND i_current_price BETWEEN 64 + 1 AND 64 + 15 + GROUP BY i_product_name, + i_item_sk, + s_store_name, + s_zip, + ad1.ca_street_number, + ad1.ca_street_name, + ad1.ca_city, + ad1.ca_zip, + ad2.ca_street_number, + ad2.ca_street_name, + ad2.ca_city, + ad2.ca_zip, + d1.d_year, + d2.d_year, + d3.d_year) +SELECT cs1.product_name, + cs1.store_name, + cs1.store_zip, + cs1.b_street_number, + cs1.b_street_name, + cs1.b_city, + cs1.b_zip, + cs1.c_street_number, + cs1.c_street_name, + cs1.c_city, + cs1.c_zip, + cs1.syear cs1syear, + cs1.cnt cs1cnt, + cs1.s1 AS s11, + cs1.s2 AS s21, + cs1.s3 AS s31, + cs2.s1 AS s12, + cs2.s2 AS s22, + cs2.s3 AS s32, + cs2.syear, + cs2.cnt +FROM cross_sales cs1, + cross_sales cs2 +WHERE cs1.item_sk=cs2.item_sk + AND cs1.syear = 1999 + AND cs2.syear = 1999 + 1 + AND cs2.cnt <= cs1.cnt + AND cs1.store_name = cs2.store_name + AND cs1.store_zip = cs2.store_zip +ORDER BY cs1.product_name, + cs1.store_name, + cs2.cnt, + cs1.s1, + cs2.s1; +---- +logical_plan +01)Sort: cs1.product_name ASC NULLS LAST, cs1.store_name ASC NULLS LAST, cs2.cnt ASC NULLS LAST, s11 ASC NULLS LAST, s12 ASC NULLS LAST +02)--Projection: cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear AS cs1syear, cs1.cnt AS cs1cnt, cs1.s1 AS s11, cs1.s2 AS s21, cs1.s3 AS s31, cs2.s1 AS s12, cs2.s2 AS s22, cs2.s3 AS s32, cs2.syear, cs2.cnt +03)----Inner Join: cs1.item_sk = cs2.item_sk, cs1.store_name = cs2.store_name, cs1.store_zip = cs2.store_zip Filter: cs2.cnt <= cs1.cnt +04)------SubqueryAlias: cs1 +05)--------SubqueryAlias: cross_sales +06)----------Projection: item.i_product_name AS product_name, item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, ad1.ca_street_number AS b_street_number, ad1.ca_street_name AS b_street_name, ad1.ca_city AS b_city, ad1.ca_zip AS b_zip, ad2.ca_street_number AS c_street_number, ad2.ca_street_name AS c_street_name, ad2.ca_city AS c_city, ad2.ca_zip AS c_zip, d1.d_year AS syear, count(Int64(1)) AS count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 +07)------------Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] +08)--------------Projection: store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, d2.d_year, d3.d_year, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, item.i_item_sk, item.i_product_name +09)----------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +10)------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +11)--------------------Inner Join: hd2.hd_income_band_sk = ib2.ib_income_band_sk +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +13)------------------------Inner Join: hd1.hd_income_band_sk = ib1.ib_income_band_sk +14)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +15)----------------------------Inner Join: customer.c_current_addr_sk = ad2.ca_address_sk +16)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip +17)--------------------------------Inner Join: store_sales.ss_addr_sk = ad1.ca_address_sk +18)----------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk +19)------------------------------------Inner Join: customer.c_current_hdemo_sk = hd2.hd_demo_sk +20)--------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk +21)----------------------------------------Inner Join: store_sales.ss_hdemo_sk = hd1.hd_demo_sk +22)------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +23)--------------------------------------------Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk +24)----------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +25)------------------------------------------------Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk Filter: cd2.cd_marital_status != cd1.cd_marital_status +26)--------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, cd1.cd_marital_status +27)----------------------------------------------------Inner Join: store_sales.ss_cdemo_sk = cd1.cd_demo_sk +28)------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +29)--------------------------------------------------------Inner Join: customer.c_first_shipto_date_sk = d3.d_date_sk +30)----------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, d2.d_year +31)------------------------------------------------------------Inner Join: customer.c_first_sales_date_sk = d2.d_date_sk +32)--------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, customer.c_first_sales_date_sk +33)----------------------------------------------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +34)------------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip +35)--------------------------------------------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +36)----------------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year +37)------------------------------------------------------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +38)--------------------------------------------------------------------------LeftSemi Join: store_sales.ss_item_sk = cs_ui.cs_item_sk +39)----------------------------------------------------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt +40)------------------------------------------------------------------------------Inner Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +41)--------------------------------------------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] +42)--------------------------------------------------------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] +43)----------------------------------------------------------------------------SubqueryAlias: cs_ui +44)------------------------------------------------------------------------------Projection: catalog_sales.cs_item_sk +45)--------------------------------------------------------------------------------Filter: CAST(sum(catalog_sales.cs_ext_list_price) AS Decimal128(38, 2)) > Decimal128(2,20,0) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) +46)----------------------------------------------------------------------------------Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] +47)------------------------------------------------------------------------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_list_price, catalog_returns.cr_refunded_cash, catalog_returns.cr_reversed_charge, catalog_returns.cr_store_credit +48)--------------------------------------------------------------------------------------Inner Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number +49)----------------------------------------------------------------------------------------TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] +50)----------------------------------------------------------------------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] +51)--------------------------------------------------------------------------SubqueryAlias: d1 +52)----------------------------------------------------------------------------Filter: date_dim.d_year = Int64(1999) +53)------------------------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(1999)] +54)----------------------------------------------------------------------TableScan: store projection=[s_store_sk, s_store_name, s_zip] +55)------------------------------------------------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] +56)--------------------------------------------------------------SubqueryAlias: d2 +57)----------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year] +58)----------------------------------------------------------SubqueryAlias: d3 +59)------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year] +60)------------------------------------------------------SubqueryAlias: cd1 +61)--------------------------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] +62)--------------------------------------------------SubqueryAlias: cd2 +63)----------------------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] +64)----------------------------------------------TableScan: promotion projection=[p_promo_sk] +65)------------------------------------------SubqueryAlias: hd1 +66)--------------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] +67)--------------------------------------SubqueryAlias: hd2 +68)----------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] +69)----------------------------------SubqueryAlias: ad1 +70)------------------------------------TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] +71)------------------------------SubqueryAlias: ad2 +72)--------------------------------TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] +73)--------------------------SubqueryAlias: ib1 +74)----------------------------TableScan: income_band projection=[ib_income_band_sk] +75)----------------------SubqueryAlias: ib2 +76)------------------------TableScan: income_band projection=[ib_income_band_sk] +77)------------------Projection: item.i_item_sk, item.i_product_name +78)--------------------Filter: item.i_color IN ([Utf8View("purple"), Utf8View("burlywood"), Utf8View("indian"), Utf8View("spring"), Utf8View("floral"), Utf8View("medium")]) AND item.i_current_price >= Decimal128(65.00,7,2) AND item.i_current_price <= Decimal128(74.00,7,2) +79)----------------------TableScan: item projection=[i_item_sk, i_current_price, i_color, i_product_name], partial_filters=[item.i_color IN ([Utf8View("purple"), Utf8View("burlywood"), Utf8View("indian"), Utf8View("spring"), Utf8View("floral"), Utf8View("medium")]), item.i_current_price >= Decimal128(65.00,7,2), item.i_current_price <= Decimal128(74.00,7,2)] +80)------SubqueryAlias: cs2 +81)--------SubqueryAlias: cross_sales +82)----------Projection: item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, d1.d_year AS syear, count(Int64(1)) AS count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 +83)------------Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] +84)--------------Projection: store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, d2.d_year, d3.d_year, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, item.i_item_sk, item.i_product_name +85)----------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +86)------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +87)--------------------Inner Join: hd2.hd_income_band_sk = ib2.ib_income_band_sk +88)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +89)------------------------Inner Join: hd1.hd_income_band_sk = ib1.ib_income_band_sk +90)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip +91)----------------------------Inner Join: customer.c_current_addr_sk = ad2.ca_address_sk +92)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip +93)--------------------------------Inner Join: store_sales.ss_addr_sk = ad1.ca_address_sk +94)----------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk +95)------------------------------------Inner Join: customer.c_current_hdemo_sk = hd2.hd_demo_sk +96)--------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk +97)----------------------------------------Inner Join: store_sales.ss_hdemo_sk = hd1.hd_demo_sk +98)------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +99)--------------------------------------------Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk +100)----------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +101)------------------------------------------------Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk Filter: cd2.cd_marital_status != cd1.cd_marital_status +102)--------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, cd1.cd_marital_status +103)----------------------------------------------------Inner Join: store_sales.ss_cdemo_sk = cd1.cd_demo_sk +104)------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year +105)--------------------------------------------------------Inner Join: customer.c_first_shipto_date_sk = d3.d_date_sk +106)----------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, d2.d_year +107)------------------------------------------------------------Inner Join: customer.c_first_sales_date_sk = d2.d_date_sk +108)--------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, customer.c_first_sales_date_sk +109)----------------------------------------------------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +110)------------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip +111)--------------------------------------------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +112)----------------------------------------------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year +113)------------------------------------------------------------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +114)--------------------------------------------------------------------------LeftSemi Join: store_sales.ss_item_sk = cs_ui.cs_item_sk +115)----------------------------------------------------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt +116)------------------------------------------------------------------------------Inner Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +117)--------------------------------------------------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] +118)--------------------------------------------------------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] +119)----------------------------------------------------------------------------SubqueryAlias: cs_ui +120)------------------------------------------------------------------------------Projection: catalog_sales.cs_item_sk +121)--------------------------------------------------------------------------------Filter: CAST(sum(catalog_sales.cs_ext_list_price) AS Decimal128(38, 2)) > Decimal128(2,20,0) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) +122)----------------------------------------------------------------------------------Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] +123)------------------------------------------------------------------------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_list_price, catalog_returns.cr_refunded_cash, catalog_returns.cr_reversed_charge, catalog_returns.cr_store_credit +124)--------------------------------------------------------------------------------------Inner Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number +125)----------------------------------------------------------------------------------------TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] +126)----------------------------------------------------------------------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] +127)--------------------------------------------------------------------------SubqueryAlias: d1 +128)----------------------------------------------------------------------------Filter: date_dim.d_year = Int64(2000) +129)------------------------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +130)----------------------------------------------------------------------TableScan: store projection=[s_store_sk, s_store_name, s_zip] +131)------------------------------------------------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] +132)--------------------------------------------------------------SubqueryAlias: d2 +133)----------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year] +134)----------------------------------------------------------SubqueryAlias: d3 +135)------------------------------------------------------------TableScan: date_dim projection=[d_date_sk, d_year] +136)------------------------------------------------------SubqueryAlias: cd1 +137)--------------------------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] +138)--------------------------------------------------SubqueryAlias: cd2 +139)----------------------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] +140)----------------------------------------------TableScan: promotion projection=[p_promo_sk] +141)------------------------------------------SubqueryAlias: hd1 +142)--------------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] +143)--------------------------------------SubqueryAlias: hd2 +144)----------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] +145)----------------------------------SubqueryAlias: ad1 +146)------------------------------------TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] +147)------------------------------SubqueryAlias: ad2 +148)--------------------------------TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] +149)--------------------------SubqueryAlias: ib1 +150)----------------------------TableScan: income_band projection=[ib_income_band_sk] +151)----------------------SubqueryAlias: ib2 +152)------------------------TableScan: income_band projection=[ib_income_band_sk] +153)------------------Projection: item.i_item_sk, item.i_product_name +154)--------------------Filter: item.i_color IN ([Utf8View("purple"), Utf8View("burlywood"), Utf8View("indian"), Utf8View("spring"), Utf8View("floral"), Utf8View("medium")]) AND item.i_current_price >= Decimal128(65.00,7,2) AND item.i_current_price <= Decimal128(74.00,7,2) +155)----------------------TableScan: item projection=[i_item_sk, i_current_price, i_color, i_product_name], partial_filters=[item.i_color IN ([Utf8View("purple"), Utf8View("burlywood"), Utf8View("indian"), Utf8View("spring"), Utf8View("floral"), Utf8View("medium")]), item.i_current_price >= Decimal128(65.00,7,2), item.i_current_price <= Decimal128(74.00,7,2)] +physical_plan +01)SortPreservingMergeExec: [product_name@0 ASC NULLS LAST, store_name@1 ASC NULLS LAST, cnt@20 ASC NULLS LAST, s11@13 ASC NULLS LAST, s12@16 ASC NULLS LAST] +02)--SortExec: expr=[product_name@0 ASC NULLS LAST, store_name@1 ASC NULLS LAST, cnt@20 ASC NULLS LAST, s11@13 ASC NULLS LAST, s12@16 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[product_name@0 as product_name, store_name@1 as store_name, store_zip@2 as store_zip, b_street_number@3 as b_street_number, b_street_name@4 as b_street_name, b_city@5 as b_city, b_zip@6 as b_zip, c_street_number@7 as c_street_number, c_street_name@8 as c_street_name, c_city@9 as c_city, c_zip@10 as c_zip, syear@11 as cs1syear, cnt@12 as cs1cnt, s1@13 as s11, s2@14 as s21, s3@15 as s31, s1@16 as s12, s2@17 as s22, s3@18 as s32, syear@19 as syear, cnt@20 as cnt] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_sk@1, item_sk@0), (store_name@2, store_name@1), (store_zip@3, store_zip@2)], filter=cnt@1 <= cnt@0, projection=[product_name@0, store_name@2, store_zip@3, b_street_number@4, b_street_name@5, b_city@6, b_zip@7, c_street_number@8, c_street_name@9, c_city@10, c_zip@11, syear@12, cnt@13, s1@14, s2@15, s3@16, s1@22, s2@23, s3@24, syear@20, cnt@21] +05)--------CoalescePartitionsExec +06)----------ProjectionExec: expr=[i_product_name@0 as product_name, i_item_sk@1 as item_sk, s_store_name@2 as store_name, s_zip@3 as store_zip, ca_street_number@4 as b_street_number, ca_street_name@5 as b_street_name, ca_city@6 as b_city, ca_zip@7 as b_zip, ca_street_number@8 as c_street_number, ca_street_name@9 as c_street_name, ca_city@10 as c_city, ca_zip@11 as c_zip, d_year@12 as syear, count(Int64(1))@15 as cnt, sum(store_sales.ss_wholesale_cost)@16 as s1, sum(store_sales.ss_list_price)@17 as s2, sum(store_sales.ss_coupon_amt)@18 as s3] +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_item_sk@1 as i_item_sk, s_store_name@2 as s_store_name, s_zip@3 as s_zip, ca_street_number@4 as ca_street_number, ca_street_name@5 as ca_street_name, ca_city@6 as ca_city, ca_zip@7 as ca_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, d_year@12 as d_year, d_year@13 as d_year, d_year@14 as d_year], aggr=[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)], ordering_mode=PartiallySorted([12]) +08)--------------RepartitionExec: partitioning=Hash([i_product_name@0, i_item_sk@1, s_store_name@2, s_zip@3, ca_street_number@4, ca_street_name@5, ca_city@6, ca_zip@7, ca_street_number@8, ca_street_name@9, ca_city@10, ca_zip@11, d_year@12, d_year@13, d_year@14], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_product_name@17 as i_product_name, i_item_sk@16 as i_item_sk, s_store_name@6 as s_store_name, s_zip@7 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, d_year@3 as d_year, d_year@4 as d_year, d_year@5 as d_year], aggr=[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)], ordering_mode=PartiallySorted([12]) +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_wholesale_cost@3, ss_list_price@4, ss_coupon_amt@5, d_year@6, d_year@9, d_year@10, s_store_name@7, s_zip@8, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18, i_item_sk@0, i_product_name@1] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex, predicate: i_color@17 IN (SET) ([purple, burlywood, indian, spring, floral, medium]) AND i_current_price@5 >= 65.00 AND i_current_price@5 <= 74.00 +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ib_income_band_sk@0, hd_income_band_sk@9)], projection=[ss_item_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, d_year@8, d_year@9, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/income_band.vortex]]}, projection=[ib_income_band_sk], file_type=vortex +14)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ib_income_band_sk@0, hd_income_band_sk@9)], projection=[ss_item_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, d_year@8, d_year@9, hd_income_band_sk@11, ca_street_number@12, ca_street_name@13, ca_city@14, ca_zip@15, ca_street_number@16, ca_street_name@17, ca_city@18, ca_zip@19] +15)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/income_band.vortex]]}, projection=[ib_income_band_sk], file_type=vortex +16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@7)], projection=[ss_item_sk@5, ss_wholesale_cost@6, ss_list_price@7, ss_coupon_amt@8, d_year@9, s_store_name@10, s_zip@11, d_year@13, d_year@14, hd_income_band_sk@15, hd_income_band_sk@16, ca_street_number@17, ca_street_name@18, ca_city@19, ca_zip@20, ca_street_number@1, ca_street_name@2, ca_city@3, ca_zip@4] +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip], file_type=vortex +18)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_item_sk@5, ss_wholesale_cost@7, ss_list_price@8, ss_coupon_amt@9, d_year@10, s_store_name@11, s_zip@12, c_current_addr_sk@13, d_year@14, d_year@15, hd_income_band_sk@16, hd_income_band_sk@17, ca_street_number@1, ca_street_name@2, ca_city@3, ca_zip@4] +19)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip], file_type=vortex +20)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, c_current_hdemo_sk@8)], projection=[ss_item_sk@2, ss_addr_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_addr_sk@11, d_year@12, d_year@13, hd_income_band_sk@14, hd_income_band_sk@1] +21)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex +22)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_item_sk@2, ss_addr_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14, hd_income_band_sk@1] +23)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex +24)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ss_promo_sk@3)], projection=[ss_item_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] +25)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex +26)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@10, cd_demo_sk@0)], filter=cd_marital_status@1 != cd_marital_status@0, projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_promo_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] +27)------------------------------------CoalescePartitionsExec +28)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@14, d_year@15, cd_marital_status@17] +29)----------------------------------------CoalescePartitionsExec +30)------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_first_shipto_date_sk@14, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@15, d_year@17] +31)--------------------------------------------CoalescePartitionsExec +32)----------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_first_sales_date_sk@15, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, c_first_shipto_date_sk@14, d_year@17] +33)------------------------------------------------CoalescePartitionsExec +34)--------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_item_sk@6, ss_cdemo_sk@8, ss_hdemo_sk@9, ss_addr_sk@10, ss_promo_sk@11, ss_wholesale_cost@12, ss_list_price@13, ss_coupon_amt@14, d_year@15, s_store_name@16, s_zip@17, c_current_cdemo_sk@1, c_current_hdemo_sk@2, c_current_addr_sk@3, c_first_shipto_date_sk@4, c_first_sales_date_sk@5] +35)----------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk], file_type=vortex +36)----------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@5)], projection=[ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_promo_sk@9, ss_wholesale_cost@10, ss_list_price@11, ss_coupon_amt@12, d_year@13, s_store_name@1, s_zip@2] +37)------------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_zip], file_type=vortex +38)------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_store_sk@8, ss_promo_sk@9, ss_wholesale_cost@10, ss_list_price@11, ss_coupon_amt@12, d_year@1] +39)--------------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 1999 +40)--------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(cs_item_sk@0, ss_item_sk@1)] +41)----------------------------------------------------------CoalescePartitionsExec +42)------------------------------------------------------------FilterExec: CAST(sum(catalog_sales.cs_ext_list_price)@1 AS Decimal128(38, 2)) > 2 * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)@2, projection=[cs_item_sk@0] +43)--------------------------------------------------------------AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] +44)----------------------------------------------------------------RepartitionExec: partitioning=Hash([cs_item_sk@0], 4), input_partitions=4 +45)------------------------------------------------------------------AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] +46)--------------------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_item_sk@0, cs_item_sk@0), (cr_order_number@1, cs_order_number@1)], projection=[cs_item_sk@5, cs_ext_list_price@7, cr_refunded_cash@2, cr_reversed_charge@3, cr_store_credit@4] +47)----------------------------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit], file_type=vortex +48)----------------------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_item_sk, cs_order_number, cs_ext_list_price], file_type=vortex +49)----------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_item_sk@0, ss_item_sk@1), (sr_ticket_number@1, ss_ticket_number@8)], projection=[ss_sold_date_sk@2, ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_store_sk@8, ss_promo_sk@9, ss_wholesale_cost@11, ss_list_price@12, ss_coupon_amt@13] +50)------------------------------------------------------------CoalescePartitionsExec +51)--------------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number], file_type=vortex +52)------------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt], file_type=vortex +53)------------------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +54)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex +55)--------------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +56)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex +57)----------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +58)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex +59)------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +60)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex +61)--------ProjectionExec: expr=[i_item_sk@1 as item_sk, s_store_name@2 as store_name, s_zip@3 as store_zip, d_year@12 as syear, count(Int64(1))@15 as cnt, sum(store_sales.ss_wholesale_cost)@16 as s1, sum(store_sales.ss_list_price)@17 as s2, sum(store_sales.ss_coupon_amt)@18 as s3] +62)----------AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_item_sk@1 as i_item_sk, s_store_name@2 as s_store_name, s_zip@3 as s_zip, ca_street_number@4 as ca_street_number, ca_street_name@5 as ca_street_name, ca_city@6 as ca_city, ca_zip@7 as ca_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, d_year@12 as d_year, d_year@13 as d_year, d_year@14 as d_year], aggr=[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)], ordering_mode=PartiallySorted([12]) +63)------------RepartitionExec: partitioning=Hash([i_product_name@0, i_item_sk@1, s_store_name@2, s_zip@3, ca_street_number@4, ca_street_name@5, ca_city@6, ca_zip@7, ca_street_number@8, ca_street_name@9, ca_city@10, ca_zip@11, d_year@12, d_year@13, d_year@14], 4), input_partitions=4 +64)--------------AggregateExec: mode=Partial, gby=[i_product_name@17 as i_product_name, i_item_sk@16 as i_item_sk, s_store_name@6 as s_store_name, s_zip@7 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, d_year@3 as d_year, d_year@4 as d_year, d_year@5 as d_year], aggr=[count(Int64(1)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)], ordering_mode=PartiallySorted([12]) +65)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_wholesale_cost@3, ss_list_price@4, ss_coupon_amt@5, d_year@6, d_year@9, d_year@10, s_store_name@7, s_zip@8, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18, i_item_sk@0, i_product_name@1] +66)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex, predicate: i_color@17 IN (SET) ([purple, burlywood, indian, spring, floral, medium]) AND i_current_price@5 >= 65.00 AND i_current_price@5 <= 74.00 +67)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ib_income_band_sk@0, hd_income_band_sk@9)], projection=[ss_item_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, d_year@8, d_year@9, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18] +68)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/income_band.vortex]]}, projection=[ib_income_band_sk], file_type=vortex +69)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ib_income_band_sk@0, hd_income_band_sk@9)], projection=[ss_item_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, d_year@8, d_year@9, hd_income_band_sk@11, ca_street_number@12, ca_street_name@13, ca_city@14, ca_zip@15, ca_street_number@16, ca_street_name@17, ca_city@18, ca_zip@19] +70)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/income_band.vortex]]}, projection=[ib_income_band_sk], file_type=vortex +71)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@7)], projection=[ss_item_sk@5, ss_wholesale_cost@6, ss_list_price@7, ss_coupon_amt@8, d_year@9, s_store_name@10, s_zip@11, d_year@13, d_year@14, hd_income_band_sk@15, hd_income_band_sk@16, ca_street_number@17, ca_street_name@18, ca_city@19, ca_zip@20, ca_street_number@1, ca_street_name@2, ca_city@3, ca_zip@4] +72)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip], file_type=vortex +73)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_item_sk@5, ss_wholesale_cost@7, ss_list_price@8, ss_coupon_amt@9, d_year@10, s_store_name@11, s_zip@12, c_current_addr_sk@13, d_year@14, d_year@15, hd_income_band_sk@16, hd_income_band_sk@17, ca_street_number@1, ca_street_name@2, ca_city@3, ca_zip@4] +74)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip], file_type=vortex +75)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, c_current_hdemo_sk@8)], projection=[ss_item_sk@2, ss_addr_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_addr_sk@11, d_year@12, d_year@13, hd_income_band_sk@14, hd_income_band_sk@1] +76)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex +77)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_item_sk@2, ss_addr_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14, hd_income_band_sk@1] +78)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex +79)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ss_promo_sk@3)], projection=[ss_item_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] +80)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex +81)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@10, cd_demo_sk@0)], filter=cd_marital_status@1 != cd_marital_status@0, projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_promo_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] +82)----------------------------------CoalescePartitionsExec +83)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@14, d_year@15, cd_marital_status@17] +84)--------------------------------------CoalescePartitionsExec +85)----------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_first_shipto_date_sk@14, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@15, d_year@17] +86)------------------------------------------CoalescePartitionsExec +87)--------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_first_sales_date_sk@15, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, c_first_shipto_date_sk@14, d_year@17] +88)----------------------------------------------CoalescePartitionsExec +89)------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_item_sk@6, ss_cdemo_sk@8, ss_hdemo_sk@9, ss_addr_sk@10, ss_promo_sk@11, ss_wholesale_cost@12, ss_list_price@13, ss_coupon_amt@14, d_year@15, s_store_name@16, s_zip@17, c_current_cdemo_sk@1, c_current_hdemo_sk@2, c_current_addr_sk@3, c_first_shipto_date_sk@4, c_first_sales_date_sk@5] +90)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk], file_type=vortex +91)--------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@5)], projection=[ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_promo_sk@9, ss_wholesale_cost@10, ss_list_price@11, ss_coupon_amt@12, d_year@13, s_store_name@1, s_zip@2] +92)----------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_zip], file_type=vortex +93)----------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_store_sk@8, ss_promo_sk@9, ss_wholesale_cost@10, ss_list_price@11, ss_coupon_amt@12, d_year@1] +94)------------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2000 +95)------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(cs_item_sk@0, ss_item_sk@1)] +96)--------------------------------------------------------CoalescePartitionsExec +97)----------------------------------------------------------FilterExec: CAST(sum(catalog_sales.cs_ext_list_price)@1 AS Decimal128(38, 2)) > 2 * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)@2, projection=[cs_item_sk@0] +98)------------------------------------------------------------AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] +99)--------------------------------------------------------------RepartitionExec: partitioning=Hash([cs_item_sk@0], 4), input_partitions=4 +100)----------------------------------------------------------------AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] +101)------------------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_item_sk@0, cs_item_sk@0), (cr_order_number@1, cs_order_number@1)], projection=[cs_item_sk@5, cs_ext_list_price@7, cr_refunded_cash@2, cr_reversed_charge@3, cr_store_credit@4] +102)--------------------------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit], file_type=vortex +103)--------------------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_item_sk, cs_order_number, cs_ext_list_price], file_type=vortex +104)--------------------------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_item_sk@0, ss_item_sk@1), (sr_ticket_number@1, ss_ticket_number@8)], projection=[ss_sold_date_sk@2, ss_item_sk@3, ss_customer_sk@4, ss_cdemo_sk@5, ss_hdemo_sk@6, ss_addr_sk@7, ss_store_sk@8, ss_promo_sk@9, ss_wholesale_cost@11, ss_list_price@12, ss_coupon_amt@13] +105)----------------------------------------------------------CoalescePartitionsExec +106)------------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number], file_type=vortex +107)----------------------------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt], file_type=vortex +108)----------------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +109)------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex +110)------------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +111)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex +112)--------------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +113)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex +114)----------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +115)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no new file mode 100644 index 00000000000..f18a93236e2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT s_store_name, + i_item_desc, + sc.revenue, + i_current_price, + i_wholesale_cost, + i_brand +FROM store, + item, + (SELECT ss_store_sk, + avg(revenue) AS ave + FROM + (SELECT ss_store_sk, + ss_item_sk, + sum(ss_sales_price) AS revenue + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1176 AND 1176+11 + GROUP BY ss_store_sk, + ss_item_sk) sa + GROUP BY ss_store_sk) sb, + (SELECT ss_store_sk, + ss_item_sk, + sum(ss_sales_price) AS revenue + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1176 AND 1176+11 + GROUP BY ss_store_sk, + ss_item_sk) sc +WHERE sb.ss_store_sk = sc.ss_store_sk + AND sc.revenue <= 0.1 * sb.ave + AND s_store_sk = sc.ss_store_sk + AND i_item_sk = sc.ss_item_sk +ORDER BY s_store_name NULLS FIRST, + i_item_desc NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: store.s_store_name ASC NULLS FIRST, item.i_item_desc ASC NULLS FIRST, fetch=100 +02)--Projection: store.s_store_name, item.i_item_desc, sc.revenue, item.i_current_price, item.i_wholesale_cost, item.i_brand +03)----LeftSemi Join: sc.ss_store_sk = sb.ss_store_sk Filter: CAST(sc.revenue AS Decimal128(30, 15)) <= CAST(Float64(0.1) * CAST(sb.ave AS Float64) AS Decimal128(30, 15)) +04)------Projection: store.s_store_name, sc.ss_store_sk, sc.revenue, item.i_item_desc, item.i_current_price, item.i_wholesale_cost, item.i_brand +05)--------Inner Join: sc.ss_item_sk = item.i_item_sk +06)----------Projection: store.s_store_name, sc.ss_store_sk, sc.ss_item_sk, sc.revenue +07)------------Inner Join: store.s_store_sk = sc.ss_store_sk +08)--------------TableScan: store projection=[s_store_sk, s_store_name] +09)--------------SubqueryAlias: sc +10)----------------Projection: store_sales.ss_store_sk, store_sales.ss_item_sk, sum(store_sales.ss_sales_price) AS revenue +11)------------------Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] +12)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +13)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +15)------------------------Projection: date_dim.d_date_sk +16)--------------------------Filter: date_dim.d_month_seq >= Int64(1176) AND date_dim.d_month_seq <= Int64(1187) +17)----------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1176), date_dim.d_month_seq <= Int64(1187)] +18)----------TableScan: item projection=[i_item_sk, i_item_desc, i_current_price, i_wholesale_cost, i_brand] +19)------SubqueryAlias: sb +20)--------Projection: sa.ss_store_sk, avg(sa.revenue) AS ave +21)----------Aggregate: groupBy=[[sa.ss_store_sk]], aggr=[[avg(sa.revenue)]] +22)------------SubqueryAlias: sa +23)--------------Projection: store_sales.ss_store_sk, sum(store_sales.ss_sales_price) AS revenue +24)----------------Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] +25)------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +26)--------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +27)----------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +28)----------------------Projection: date_dim.d_date_sk +29)------------------------Filter: date_dim.d_month_seq >= Int64(1176) AND date_dim.d_month_seq <= Int64(1187) +30)--------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1176), date_dim.d_month_seq <= Int64(1187)] +physical_plan +01)SortPreservingMergeExec: [s_store_name@0 ASC, i_item_desc@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC, i_item_desc@1 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ss_store_sk@1, ss_store_sk@0)], filter=CAST(revenue@0 AS Decimal128(30, 15)) <= CAST(0.1 * CAST(ave@1 AS Float64) AS Decimal128(30, 15)), projection=[s_store_name@0, i_item_desc@3, revenue@2, i_current_price@4, i_wholesale_cost@5, i_brand@6] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@2)], projection=[s_store_name@5, ss_store_sk@6, revenue@8, i_item_desc@1, i_current_price@2, i_wholesale_cost@3, i_brand@4] +06)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_desc, i_current_price, i_wholesale_cost, i_brand], file_type=vortex +07)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[s_store_name@1, ss_store_sk@2, ss_item_sk@3, revenue@4] +08)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name], file_type=vortex +09)------------ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk, sum(store_sales.ss_sales_price)@2 as revenue] +10)--------------AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] +11)----------------RepartitionExec: partitioning=Hash([ss_store_sk@0, ss_item_sk@1], 4), input_partitions=4 +12)------------------AggregateExec: mode=Partial, gby=[ss_store_sk@1 as ss_store_sk, ss_item_sk@0 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] +13)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_sales_price@4] +14)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1176 AND d_month_seq@3 <= 1187 +15)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex +16)------ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, avg(sa.revenue)@1 as ave] +17)--------AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(sa.revenue)] +18)----------RepartitionExec: partitioning=Hash([ss_store_sk@0], 4), input_partitions=4 +19)------------AggregateExec: mode=Partial, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(sa.revenue)] +20)--------------ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, sum(store_sales.ss_sales_price)@2 as revenue] +21)----------------AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] +22)------------------RepartitionExec: partitioning=Hash([ss_store_sk@0, ss_item_sk@1], 4), input_partitions=4 +23)--------------------AggregateExec: mode=Partial, gby=[ss_store_sk@1 as ss_store_sk, ss_item_sk@0 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] +24)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_sales_price@4] +25)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1176 AND d_month_seq@3 <= 1187 +26)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no new file mode 100644 index 00000000000..16ee29ad3c1 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no @@ -0,0 +1,309 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year_ + ,sum(jan_sales) as jan_sales + ,sum(feb_sales) as feb_sales + ,sum(mar_sales) as mar_sales + ,sum(apr_sales) as apr_sales + ,sum(may_sales) as may_sales + ,sum(jun_sales) as jun_sales + ,sum(jul_sales) as jul_sales + ,sum(aug_sales) as aug_sales + ,sum(sep_sales) as sep_sales + ,sum(oct_sales) as oct_sales + ,sum(nov_sales) as nov_sales + ,sum(dec_sales) as dec_sales + ,sum(jan_sales/w_warehouse_sq_ft) as jan_sales_per_sq_foot + ,sum(feb_sales/w_warehouse_sq_ft) as feb_sales_per_sq_foot + ,sum(mar_sales/w_warehouse_sq_ft) as mar_sales_per_sq_foot + ,sum(apr_sales/w_warehouse_sq_ft) as apr_sales_per_sq_foot + ,sum(may_sales/w_warehouse_sq_ft) as may_sales_per_sq_foot + ,sum(jun_sales/w_warehouse_sq_ft) as jun_sales_per_sq_foot + ,sum(jul_sales/w_warehouse_sq_ft) as jul_sales_per_sq_foot + ,sum(aug_sales/w_warehouse_sq_ft) as aug_sales_per_sq_foot + ,sum(sep_sales/w_warehouse_sq_ft) as sep_sales_per_sq_foot + ,sum(oct_sales/w_warehouse_sq_ft) as oct_sales_per_sq_foot + ,sum(nov_sales/w_warehouse_sq_ft) as nov_sales_per_sq_foot + ,sum(dec_sales/w_warehouse_sq_ft) as dec_sales_per_sq_foot + ,sum(jan_net) as jan_net + ,sum(feb_net) as feb_net + ,sum(mar_net) as mar_net + ,sum(apr_net) as apr_net + ,sum(may_net) as may_net + ,sum(jun_net) as jun_net + ,sum(jul_net) as jul_net + ,sum(aug_net) as aug_net + ,sum(sep_net) as sep_net + ,sum(oct_net) as oct_net + ,sum(nov_net) as nov_net + ,sum(dec_net) as dec_net + from ( + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DHL,BARIAN' as ship_carriers + ,d_year as year_ + ,sum(case when d_moy = 1 + then ws_ext_sales_price* ws_quantity else 0 end) as jan_sales + ,sum(case when d_moy = 2 + then ws_ext_sales_price* ws_quantity else 0 end) as feb_sales + ,sum(case when d_moy = 3 + then ws_ext_sales_price* ws_quantity else 0 end) as mar_sales + ,sum(case when d_moy = 4 + then ws_ext_sales_price* ws_quantity else 0 end) as apr_sales + ,sum(case when d_moy = 5 + then ws_ext_sales_price* ws_quantity else 0 end) as may_sales + ,sum(case when d_moy = 6 + then ws_ext_sales_price* ws_quantity else 0 end) as jun_sales + ,sum(case when d_moy = 7 + then ws_ext_sales_price* ws_quantity else 0 end) as jul_sales + ,sum(case when d_moy = 8 + then ws_ext_sales_price* ws_quantity else 0 end) as aug_sales + ,sum(case when d_moy = 9 + then ws_ext_sales_price* ws_quantity else 0 end) as sep_sales + ,sum(case when d_moy = 10 + then ws_ext_sales_price* ws_quantity else 0 end) as oct_sales + ,sum(case when d_moy = 11 + then ws_ext_sales_price* ws_quantity else 0 end) as nov_sales + ,sum(case when d_moy = 12 + then ws_ext_sales_price* ws_quantity else 0 end) as dec_sales + ,sum(case when d_moy = 1 + then ws_net_paid * ws_quantity else 0 end) as jan_net + ,sum(case when d_moy = 2 + then ws_net_paid * ws_quantity else 0 end) as feb_net + ,sum(case when d_moy = 3 + then ws_net_paid * ws_quantity else 0 end) as mar_net + ,sum(case when d_moy = 4 + then ws_net_paid * ws_quantity else 0 end) as apr_net + ,sum(case when d_moy = 5 + then ws_net_paid * ws_quantity else 0 end) as may_net + ,sum(case when d_moy = 6 + then ws_net_paid * ws_quantity else 0 end) as jun_net + ,sum(case when d_moy = 7 + then ws_net_paid * ws_quantity else 0 end) as jul_net + ,sum(case when d_moy = 8 + then ws_net_paid * ws_quantity else 0 end) as aug_net + ,sum(case when d_moy = 9 + then ws_net_paid * ws_quantity else 0 end) as sep_net + ,sum(case when d_moy = 10 + then ws_net_paid * ws_quantity else 0 end) as oct_net + ,sum(case when d_moy = 11 + then ws_net_paid * ws_quantity else 0 end) as nov_net + ,sum(case when d_moy = 12 + then ws_net_paid * ws_quantity else 0 end) as dec_net + from + web_sales + ,warehouse + ,date_dim + ,time_dim + ,ship_mode + where + ws_warehouse_sk = w_warehouse_sk + and ws_sold_date_sk = d_date_sk + and ws_sold_time_sk = t_time_sk + and ws_ship_mode_sk = sm_ship_mode_sk + and d_year = 2001 + and t_time between 30838 and 30838+28800 + and sm_carrier in ('DHL','BARIAN') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + union all + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DHL,BARIAN' as ship_carriers + ,d_year as year_ + ,sum(case when d_moy = 1 + then cs_sales_price* cs_quantity else 0 end) as jan_sales + ,sum(case when d_moy = 2 + then cs_sales_price* cs_quantity else 0 end) as feb_sales + ,sum(case when d_moy = 3 + then cs_sales_price* cs_quantity else 0 end) as mar_sales + ,sum(case when d_moy = 4 + then cs_sales_price* cs_quantity else 0 end) as apr_sales + ,sum(case when d_moy = 5 + then cs_sales_price* cs_quantity else 0 end) as may_sales + ,sum(case when d_moy = 6 + then cs_sales_price* cs_quantity else 0 end) as jun_sales + ,sum(case when d_moy = 7 + then cs_sales_price* cs_quantity else 0 end) as jul_sales + ,sum(case when d_moy = 8 + then cs_sales_price* cs_quantity else 0 end) as aug_sales + ,sum(case when d_moy = 9 + then cs_sales_price* cs_quantity else 0 end) as sep_sales + ,sum(case when d_moy = 10 + then cs_sales_price* cs_quantity else 0 end) as oct_sales + ,sum(case when d_moy = 11 + then cs_sales_price* cs_quantity else 0 end) as nov_sales + ,sum(case when d_moy = 12 + then cs_sales_price* cs_quantity else 0 end) as dec_sales + ,sum(case when d_moy = 1 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jan_net + ,sum(case when d_moy = 2 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as feb_net + ,sum(case when d_moy = 3 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as mar_net + ,sum(case when d_moy = 4 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as apr_net + ,sum(case when d_moy = 5 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as may_net + ,sum(case when d_moy = 6 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jun_net + ,sum(case when d_moy = 7 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jul_net + ,sum(case when d_moy = 8 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as aug_net + ,sum(case when d_moy = 9 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as sep_net + ,sum(case when d_moy = 10 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as oct_net + ,sum(case when d_moy = 11 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as nov_net + ,sum(case when d_moy = 12 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as dec_net + from + catalog_sales + ,warehouse + ,date_dim + ,time_dim + ,ship_mode + where + cs_warehouse_sk = w_warehouse_sk + and cs_sold_date_sk = d_date_sk + and cs_sold_time_sk = t_time_sk + and cs_ship_mode_sk = sm_ship_mode_sk + and d_year = 2001 + and t_time between 30838 AND 30838+28800 + and sm_carrier in ('DHL','BARIAN') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + ) x + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year_ + order by w_warehouse_name NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: x.w_warehouse_name ASC NULLS FIRST, fetch=100 +02)--Projection: x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year_, sum(x.jan_sales) AS jan_sales, sum(x.feb_sales) AS feb_sales, sum(x.mar_sales) AS mar_sales, sum(x.apr_sales) AS apr_sales, sum(x.may_sales) AS may_sales, sum(x.jun_sales) AS jun_sales, sum(x.jul_sales) AS jul_sales, sum(x.aug_sales) AS aug_sales, sum(x.sep_sales) AS sep_sales, sum(x.oct_sales) AS oct_sales, sum(x.nov_sales) AS nov_sales, sum(x.dec_sales) AS dec_sales, sum(x.jan_sales / x.w_warehouse_sq_ft) AS jan_sales_per_sq_foot, sum(x.feb_sales / x.w_warehouse_sq_ft) AS feb_sales_per_sq_foot, sum(x.mar_sales / x.w_warehouse_sq_ft) AS mar_sales_per_sq_foot, sum(x.apr_sales / x.w_warehouse_sq_ft) AS apr_sales_per_sq_foot, sum(x.may_sales / x.w_warehouse_sq_ft) AS may_sales_per_sq_foot, sum(x.jun_sales / x.w_warehouse_sq_ft) AS jun_sales_per_sq_foot, sum(x.jul_sales / x.w_warehouse_sq_ft) AS jul_sales_per_sq_foot, sum(x.aug_sales / x.w_warehouse_sq_ft) AS aug_sales_per_sq_foot, sum(x.sep_sales / x.w_warehouse_sq_ft) AS sep_sales_per_sq_foot, sum(x.oct_sales / x.w_warehouse_sq_ft) AS oct_sales_per_sq_foot, sum(x.nov_sales / x.w_warehouse_sq_ft) AS nov_sales_per_sq_foot, sum(x.dec_sales / x.w_warehouse_sq_ft) AS dec_sales_per_sq_foot, sum(x.jan_net) AS jan_net, sum(x.feb_net) AS feb_net, sum(x.mar_net) AS mar_net, sum(x.apr_net) AS apr_net, sum(x.may_net) AS may_net, sum(x.jun_net) AS jun_net, sum(x.jul_net) AS jul_net, sum(x.aug_net) AS aug_net, sum(x.sep_net) AS sep_net, sum(x.oct_net) AS oct_net, sum(x.nov_net) AS nov_net, sum(x.dec_net) AS dec_net +03)----Aggregate: groupBy=[[x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year_]], aggr=[[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.feb_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.mar_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.apr_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.may_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jun_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jul_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.aug_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.sep_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.oct_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.nov_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.dec_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)]] +04)------Projection: CAST(x.w_warehouse_sq_ft AS Decimal128(20, 0)) AS __common_expr_1, x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year_, x.jan_sales, x.feb_sales, x.mar_sales, x.apr_sales, x.may_sales, x.jun_sales, x.jul_sales, x.aug_sales, x.sep_sales, x.oct_sales, x.nov_sales, x.dec_sales, x.jan_net, x.feb_net, x.mar_net, x.apr_net, x.may_net, x.jun_net, x.jul_net, x.aug_net, x.sep_net, x.oct_net, x.nov_net, x.dec_net +05)--------SubqueryAlias: x +06)----------Union +07)------------Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("DHL,BARIAN") AS ship_carriers, date_dim.d_year AS year_, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END) AS dec_net +08)--------------Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN __common_expr_2 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_ext_sales_price * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_2 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_net_paid * CAST(web_sales.ws_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)]] +09)----------------Projection: date_dim.d_moy = Int64(1) AS __common_expr_2, date_dim.d_moy = Int64(2) AS __common_expr_3, date_dim.d_moy = Int64(3) AS __common_expr_4, date_dim.d_moy = Int64(4) AS __common_expr_5, date_dim.d_moy = Int64(5) AS __common_expr_6, date_dim.d_moy = Int64(6) AS __common_expr_7, date_dim.d_moy = Int64(7) AS __common_expr_8, date_dim.d_moy = Int64(8) AS __common_expr_9, date_dim.d_moy = Int64(9) AS __common_expr_10, date_dim.d_moy = Int64(10) AS __common_expr_11, date_dim.d_moy = Int64(11) AS __common_expr_12, date_dim.d_moy = Int64(12) AS __common_expr_13, web_sales.ws_quantity, web_sales.ws_ext_sales_price, web_sales.ws_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year +10)------------------Inner Join: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk +11)--------------------Projection: web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_sales_price, web_sales.ws_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy +12)----------------------Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk +13)------------------------Projection: web_sales.ws_sold_time_sk, web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_sales_price, web_sales.ws_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy +14)--------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +15)----------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_sales_price, web_sales.ws_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country +16)------------------------------Inner Join: web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk +17)--------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_ship_mode_sk, ws_warehouse_sk, ws_quantity, ws_ext_sales_price, ws_net_paid] +18)--------------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] +19)----------------------------Filter: date_dim.d_year = Int64(2001) +20)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001)] +21)------------------------Projection: time_dim.t_time_sk +22)--------------------------Filter: time_dim.t_time >= Int64(30838) AND time_dim.t_time <= Int64(59638) +23)----------------------------TableScan: time_dim projection=[t_time_sk, t_time], partial_filters=[time_dim.t_time >= Int64(30838), time_dim.t_time <= Int64(59638)] +24)--------------------Projection: ship_mode.sm_ship_mode_sk +25)----------------------Filter: ship_mode.sm_carrier = Utf8View("DHL") OR ship_mode.sm_carrier = Utf8View("BARIAN") +26)------------------------TableScan: ship_mode projection=[sm_ship_mode_sk, sm_carrier], partial_filters=[ship_mode.sm_carrier = Utf8View("DHL") OR ship_mode.sm_carrier = Utf8View("BARIAN")] +27)------------Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("DHL,BARIAN") AS ship_carriers, date_dim.d_year AS year_, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_net +28)--------------Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_net_paid_inc_tax * CAST(catalog_sales.cs_quantity AS Decimal128(20, 0)) ELSE Decimal128(0.00,28,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)]] +29)----------------Projection: date_dim.d_moy = Int64(1) AS __common_expr_14, date_dim.d_moy = Int64(2) AS __common_expr_15, date_dim.d_moy = Int64(3) AS __common_expr_16, date_dim.d_moy = Int64(4) AS __common_expr_17, date_dim.d_moy = Int64(5) AS __common_expr_18, date_dim.d_moy = Int64(6) AS __common_expr_19, date_dim.d_moy = Int64(7) AS __common_expr_20, date_dim.d_moy = Int64(8) AS __common_expr_21, date_dim.d_moy = Int64(9) AS __common_expr_22, date_dim.d_moy = Int64(10) AS __common_expr_23, date_dim.d_moy = Int64(11) AS __common_expr_24, date_dim.d_moy = Int64(12) AS __common_expr_25, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid_inc_tax, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year +30)------------------Inner Join: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk +31)--------------------Projection: catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid_inc_tax, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy +32)----------------------Inner Join: catalog_sales.cs_sold_time_sk = time_dim.t_time_sk +33)------------------------Projection: catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid_inc_tax, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy +34)--------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +35)----------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid_inc_tax, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country +36)------------------------------Inner Join: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk +37)--------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_quantity, cs_sales_price, cs_net_paid_inc_tax] +38)--------------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] +39)----------------------------Filter: date_dim.d_year = Int64(2001) +40)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001)] +41)------------------------Projection: time_dim.t_time_sk +42)--------------------------Filter: time_dim.t_time >= Int64(30838) AND time_dim.t_time <= Int64(59638) +43)----------------------------TableScan: time_dim projection=[t_time_sk, t_time], partial_filters=[time_dim.t_time >= Int64(30838), time_dim.t_time <= Int64(59638)] +44)--------------------Projection: ship_mode.sm_ship_mode_sk +45)----------------------Filter: ship_mode.sm_carrier = Utf8View("DHL") OR ship_mode.sm_carrier = Utf8View("BARIAN") +46)------------------------TableScan: ship_mode projection=[sm_ship_mode_sk, sm_carrier], partial_filters=[ship_mode.sm_carrier = Utf8View("DHL") OR ship_mode.sm_carrier = Utf8View("BARIAN")] +physical_plan +01)SortPreservingMergeExec: [w_warehouse_name@0 ASC], fetch=100 +02)--ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, ship_carriers@6 as ship_carriers, year_@7 as year_, sum(x.jan_sales)@8 as jan_sales, sum(x.feb_sales)@9 as feb_sales, sum(x.mar_sales)@10 as mar_sales, sum(x.apr_sales)@11 as apr_sales, sum(x.may_sales)@12 as may_sales, sum(x.jun_sales)@13 as jun_sales, sum(x.jul_sales)@14 as jul_sales, sum(x.aug_sales)@15 as aug_sales, sum(x.sep_sales)@16 as sep_sales, sum(x.oct_sales)@17 as oct_sales, sum(x.nov_sales)@18 as nov_sales, sum(x.dec_sales)@19 as dec_sales, sum(x.jan_sales / x.w_warehouse_sq_ft)@20 as jan_sales_per_sq_foot, sum(x.feb_sales / x.w_warehouse_sq_ft)@21 as feb_sales_per_sq_foot, sum(x.mar_sales / x.w_warehouse_sq_ft)@22 as mar_sales_per_sq_foot, sum(x.apr_sales / x.w_warehouse_sq_ft)@23 as apr_sales_per_sq_foot, sum(x.may_sales / x.w_warehouse_sq_ft)@24 as may_sales_per_sq_foot, sum(x.jun_sales / x.w_warehouse_sq_ft)@25 as jun_sales_per_sq_foot, sum(x.jul_sales / x.w_warehouse_sq_ft)@26 as jul_sales_per_sq_foot, sum(x.aug_sales / x.w_warehouse_sq_ft)@27 as aug_sales_per_sq_foot, sum(x.sep_sales / x.w_warehouse_sq_ft)@28 as sep_sales_per_sq_foot, sum(x.oct_sales / x.w_warehouse_sq_ft)@29 as oct_sales_per_sq_foot, sum(x.nov_sales / x.w_warehouse_sq_ft)@30 as nov_sales_per_sq_foot, sum(x.dec_sales / x.w_warehouse_sq_ft)@31 as dec_sales_per_sq_foot, sum(x.jan_net)@32 as jan_net, sum(x.feb_net)@33 as feb_net, sum(x.mar_net)@34 as mar_net, sum(x.apr_net)@35 as apr_net, sum(x.may_net)@36 as may_net, sum(x.jun_net)@37 as jun_net, sum(x.jul_net)@38 as jul_net, sum(x.aug_net)@39 as aug_net, sum(x.sep_net)@40 as sep_net, sum(x.oct_net)@41 as oct_net, sum(x.nov_net)@42 as nov_net, sum(x.dec_net)@43 as dec_net] +03)----SortExec: TopK(fetch=100), expr=[w_warehouse_name@0 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=SinglePartitioned, gby=[w_warehouse_name@1 as w_warehouse_name, w_warehouse_sq_ft@2 as w_warehouse_sq_ft, w_city@3 as w_city, w_county@4 as w_county, w_state@5 as w_state, w_country@6 as w_country, ship_carriers@7 as ship_carriers, year_@8 as year_], aggr=[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / x.w_warehouse_sq_ft), sum(x.feb_sales / x.w_warehouse_sq_ft), sum(x.mar_sales / x.w_warehouse_sq_ft), sum(x.apr_sales / x.w_warehouse_sq_ft), sum(x.may_sales / x.w_warehouse_sq_ft), sum(x.jun_sales / x.w_warehouse_sq_ft), sum(x.jul_sales / x.w_warehouse_sq_ft), sum(x.aug_sales / x.w_warehouse_sq_ft), sum(x.sep_sales / x.w_warehouse_sq_ft), sum(x.oct_sales / x.w_warehouse_sq_ft), sum(x.nov_sales / x.w_warehouse_sq_ft), sum(x.dec_sales / x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)] +05)--------ProjectionExec: expr=[CAST(w_warehouse_sq_ft@1 AS Decimal128(20, 0)) as __common_expr_1, w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, ship_carriers@6 as ship_carriers, year_@7 as year_, jan_sales@8 as jan_sales, feb_sales@9 as feb_sales, mar_sales@10 as mar_sales, apr_sales@11 as apr_sales, may_sales@12 as may_sales, jun_sales@13 as jun_sales, jul_sales@14 as jul_sales, aug_sales@15 as aug_sales, sep_sales@16 as sep_sales, oct_sales@17 as oct_sales, nov_sales@18 as nov_sales, dec_sales@19 as dec_sales, jan_net@20 as jan_net, feb_net@21 as feb_net, mar_net@22 as mar_net, apr_net@23 as apr_net, may_net@24 as may_net, jun_net@25 as jun_net, jul_net@26 as jul_net, aug_net@27 as aug_net, sep_net@28 as sep_net, oct_net@29 as oct_net, nov_net@30 as nov_net, dec_net@31 as dec_net] +06)----------InterleaveExec +07)------------ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, DHL,BARIAN as ship_carriers, d_year@6 as year_, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@7 as jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@8 as feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@9 as mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@10 as apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@11 as may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@12 as jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@13 as jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@14 as aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@15 as sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@16 as oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@17 as nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END)@18 as dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@19 as jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@20 as feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@21 as mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@22 as apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@23 as may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@24 as jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@25 as jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@26 as aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@27 as sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@28 as oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@29 as nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)@30 as dec_net] +08)--------------AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, d_year@6 as d_year], aggr=[sum(CASE WHEN __common_expr_2 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_2 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)], ordering_mode=PartiallySorted([6]) +09)----------------RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sq_ft@1, w_city@2, w_county@3, w_state@4, w_country@5, d_year@6], 4), input_partitions=4 +10)------------------AggregateExec: mode=Partial, gby=[w_warehouse_name@15 as w_warehouse_name, w_warehouse_sq_ft@16 as w_warehouse_sq_ft, w_city@17 as w_city, w_county@18 as w_county, w_state@19 as w_state, w_country@20 as w_country, d_year@21 as d_year], aggr=[sum(CASE WHEN __common_expr_2 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_sales_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_2 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_paid * web_sales.ws_quantity ELSE Int64(0) END)], ordering_mode=PartiallySorted([6]) +11)--------------------ProjectionExec: expr=[d_moy@0 = 1 as __common_expr_2, d_moy@0 = 2 as __common_expr_3, d_moy@0 = 3 as __common_expr_4, d_moy@0 = 4 as __common_expr_5, d_moy@0 = 5 as __common_expr_6, d_moy@0 = 6 as __common_expr_7, d_moy@0 = 7 as __common_expr_8, d_moy@0 = 8 as __common_expr_9, d_moy@0 = 9 as __common_expr_10, d_moy@0 = 10 as __common_expr_11, d_moy@0 = 11 as __common_expr_12, d_moy@0 = 12 as __common_expr_13, ws_quantity@1 as ws_quantity, ws_ext_sales_price@2 as ws_ext_sales_price, ws_net_paid@3 as ws_net_paid, w_warehouse_name@4 as w_warehouse_name, w_warehouse_sq_ft@5 as w_warehouse_sq_ft, w_city@6 as w_city, w_county@7 as w_county, w_state@8 as w_state, w_country@9 as w_country, d_year@10 as d_year] +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sm_ship_mode_sk@0, ws_ship_mode_sk@0)], projection=[d_moy@12, ws_quantity@2, ws_ext_sales_price@3, ws_net_paid@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11] +13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/ship_mode.vortex]]}, projection=[sm_ship_mode_sk], file_type=vortex, predicate: sm_carrier@4 = DHL OR sm_carrier@4 = BARIAN +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_sold_time_sk@0, t_time_sk@0)], projection=[ws_ship_mode_sk@1, ws_quantity@2, ws_ext_sales_price@3, ws_net_paid@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11, d_moy@12] +15)--------------------------CoalescePartitionsExec +16)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_sold_time_sk@4, ws_ship_mode_sk@5, ws_quantity@6, ws_ext_sales_price@7, ws_net_paid@8, w_warehouse_name@9, w_warehouse_sq_ft@10, w_city@11, w_county@12, w_state@13, w_country@14, d_year@1, d_moy@2] +17)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 2001 +18)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, ws_warehouse_sk@3)], projection=[ws_sold_date_sk@7, ws_sold_time_sk@8, ws_ship_mode_sk@9, ws_quantity@11, ws_ext_sales_price@12, ws_net_paid@13, w_warehouse_name@1, w_warehouse_sq_ft@2, w_city@3, w_county@4, w_state@5, w_country@6] +19)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country], file_type=vortex +20)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_sold_time_sk, ws_ship_mode_sk, ws_warehouse_sk, ws_quantity, ws_ext_sales_price, ws_net_paid], file_type=vortex +21)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_time@2 >= 30838 AND t_time@2 <= 59638 +23)------------ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, DHL,BARIAN as ship_carriers, d_year@6 as year_, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@7 as jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@8 as feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@9 as mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@10 as apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@11 as may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@12 as jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@13 as jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@14 as aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@15 as sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@16 as oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@17 as nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@18 as dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@19 as jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@20 as feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@21 as mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@22 as apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@23 as may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@24 as jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@25 as jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@26 as aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@27 as sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@28 as oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@29 as nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)@30 as dec_net] +24)--------------AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, d_year@6 as d_year], aggr=[sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)], ordering_mode=PartiallySorted([6]) +25)----------------RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sq_ft@1, w_city@2, w_county@3, w_state@4, w_country@5, d_year@6], 4), input_partitions=4 +26)------------------AggregateExec: mode=Partial, gby=[w_warehouse_name@15 as w_warehouse_name, w_warehouse_sq_ft@16 as w_warehouse_sq_ft, w_city@17 as w_city, w_county@18 as w_county, w_state@19 as w_state, w_country@20 as w_country, d_year@21 as d_year], aggr=[sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_14 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE 0.00 END) as sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid_inc_tax * catalog_sales.cs_quantity ELSE Int64(0) END)], ordering_mode=PartiallySorted([6]) +27)--------------------ProjectionExec: expr=[d_moy@0 = 1 as __common_expr_14, d_moy@0 = 2 as __common_expr_15, d_moy@0 = 3 as __common_expr_16, d_moy@0 = 4 as __common_expr_17, d_moy@0 = 5 as __common_expr_18, d_moy@0 = 6 as __common_expr_19, d_moy@0 = 7 as __common_expr_20, d_moy@0 = 8 as __common_expr_21, d_moy@0 = 9 as __common_expr_22, d_moy@0 = 10 as __common_expr_23, d_moy@0 = 11 as __common_expr_24, d_moy@0 = 12 as __common_expr_25, cs_quantity@1 as cs_quantity, cs_sales_price@2 as cs_sales_price, cs_net_paid_inc_tax@3 as cs_net_paid_inc_tax, w_warehouse_name@4 as w_warehouse_name, w_warehouse_sq_ft@5 as w_warehouse_sq_ft, w_city@6 as w_city, w_county@7 as w_county, w_state@8 as w_state, w_country@9 as w_country, d_year@10 as d_year] +28)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sm_ship_mode_sk@0, cs_ship_mode_sk@0)], projection=[d_moy@12, cs_quantity@2, cs_sales_price@3, cs_net_paid_inc_tax@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11] +29)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/ship_mode.vortex]]}, projection=[sm_ship_mode_sk], file_type=vortex, predicate: sm_carrier@4 = DHL OR sm_carrier@4 = BARIAN +30)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_sold_time_sk@0, t_time_sk@0)], projection=[cs_ship_mode_sk@1, cs_quantity@2, cs_sales_price@3, cs_net_paid_inc_tax@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11, d_moy@12] +31)--------------------------CoalescePartitionsExec +32)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_sold_time_sk@4, cs_ship_mode_sk@5, cs_quantity@6, cs_sales_price@7, cs_net_paid_inc_tax@8, w_warehouse_name@9, w_warehouse_sq_ft@10, w_city@11, w_county@12, w_state@13, w_country@14, d_year@1, d_moy@2] +33)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy], file_type=vortex, predicate: d_year@6 = 2001 +34)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, cs_warehouse_sk@3)], projection=[cs_sold_date_sk@7, cs_sold_time_sk@8, cs_ship_mode_sk@9, cs_quantity@11, cs_sales_price@12, cs_net_paid_inc_tax@13, w_warehouse_name@1, w_warehouse_sq_ft@2, w_city@3, w_county@4, w_state@5, w_country@6] +35)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country], file_type=vortex +36)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_sold_time_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_quantity, cs_sales_price, cs_net_paid_inc_tax], file_type=vortex +37)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +38)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_time@2 >= 30838 AND t_time@2 <= 59638 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q67.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q67.slt.no new file mode 100644 index 00000000000..4732d3adde5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q67.slt.no @@ -0,0 +1,91 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT i_category, + i_class, + i_brand, + i_product_name, + d_year, + d_qoy, + d_moy, + s_store_id, + sumsales, + rank() OVER (PARTITION BY i_category + ORDER BY sumsales DESC) rk + FROM + (SELECT i_category, + i_class, + i_brand, + i_product_name, + d_year, + d_qoy, + d_moy, + s_store_id, + sum(coalesce(ss_sales_price*ss_quantity,0)) sumsales + FROM store_sales, + date_dim, + store, + item + WHERE ss_sold_date_sk=d_date_sk + AND ss_item_sk=i_item_sk + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + GROUP BY rollup(i_category, i_class, i_brand, i_product_name, d_year, d_qoy, d_moy,s_store_id))dw1) dw2 +WHERE rk <= 100 +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_brand NULLS FIRST, + i_product_name NULLS FIRST, + d_year NULLS FIRST, + d_qoy NULLS FIRST, + d_moy NULLS FIRST, + s_store_id NULLS FIRST, + sumsales NULLS FIRST, + rk NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: dw2.i_category ASC NULLS FIRST, dw2.i_class ASC NULLS FIRST, dw2.i_brand ASC NULLS FIRST, dw2.i_product_name ASC NULLS FIRST, dw2.d_year ASC NULLS FIRST, dw2.d_qoy ASC NULLS FIRST, dw2.d_moy ASC NULLS FIRST, dw2.s_store_id ASC NULLS FIRST, dw2.sumsales ASC NULLS FIRST, dw2.rk ASC NULLS FIRST, fetch=100 +02)--SubqueryAlias: dw2 +03)----Projection: dw1.i_category, dw1.i_class, dw1.i_brand, dw1.i_product_name, dw1.d_year, dw1.d_qoy, dw1.d_moy, dw1.s_store_id, dw1.sumsales, rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rk +04)------Filter: rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(100) +05)--------WindowAggr: windowExpr=[[rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +06)----------SubqueryAlias: dw1 +07)------------Projection: item.i_category, item.i_class, item.i_brand, item.i_product_name, date_dim.d_year, date_dim.d_qoy, date_dim.d_moy, store.s_store_id, sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0))) AS sumsales +08)--------------Aggregate: groupBy=[[ROLLUP (item.i_category, item.i_class, item.i_brand, item.i_product_name, date_dim.d_year, date_dim.d_qoy, date_dim.d_moy, store.s_store_id)]], aggr=[[sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE Decimal128(0.00,28,2) END) AS sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))]] +09)----------------Projection: store_sales.ss_sales_price * CAST(store_sales.ss_quantity AS Decimal128(20, 0)) AS __common_expr_1, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy, store.s_store_id, item.i_brand, item.i_class, item.i_category, item.i_product_name +10)------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +11)--------------------Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy, store.s_store_id +12)----------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +13)------------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy +14)--------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +15)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_quantity, ss_sales_price] +16)----------------------------Projection: date_dim.d_date_sk, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy +17)------------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +18)--------------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq, d_year, d_moy, d_qoy], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +19)------------------------TableScan: store projection=[s_store_sk, s_store_id] +20)--------------------TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] +physical_plan +01)SortPreservingMergeExec: [i_category@0 ASC, i_class@1 ASC, i_brand@2 ASC, i_product_name@3 ASC, d_year@4 ASC, d_qoy@5 ASC, d_moy@6 ASC, s_store_id@7 ASC, sumsales@8 ASC, rk@9 ASC], fetch=100 +02)--ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, sumsales@8 as sumsales, rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@9 as rk] +03)----SortExec: TopK(fetch=100), expr=[i_category@0 ASC, i_class@1 ASC, i_brand@2 ASC, i_product_name@3 ASC, d_year@4 ASC, d_qoy@5 ASC, d_moy@6 ASC, s_store_id@7 ASC, sumsales@8 ASC, rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@9 ASC], preserve_partitioning=[true] +04)------FilterExec: rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@9 <= 100 +05)--------BoundedWindowAggExec: wdw=[rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +06)----------SortExec: expr=[i_category@0 ASC NULLS LAST, sumsales@8 DESC], preserve_partitioning=[true] +07)------------RepartitionExec: partitioning=Hash([i_category@0], 4), input_partitions=4 +08)--------------ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))@9 as sumsales] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, __grouping_id@8 as __grouping_id], aggr=[sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))] +10)------------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1, i_brand@2, i_product_name@3, d_year@4, d_qoy@5, d_moy@6, s_store_id@7, __grouping_id@8], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[(NULL as i_category, NULL as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, NULL as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, i_product_name@8 as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, i_product_name@8 as i_product_name, d_year@1 as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, i_product_name@8 as i_product_name, d_year@1 as d_year, d_qoy@3 as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, i_product_name@8 as i_product_name, d_year@1 as d_year, d_qoy@3 as d_qoy, d_moy@2 as d_moy, NULL as s_store_id), (i_category@7 as i_category, i_class@6 as i_class, i_brand@5 as i_brand, i_product_name@8 as i_product_name, d_year@1 as d_year, d_qoy@3 as d_qoy, d_moy@2 as d_moy, s_store_id@4 as s_store_id)], aggr=[sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))] +12)----------------------ProjectionExec: expr=[ss_sales_price@0 * CAST(ss_quantity@1 AS Decimal128(20, 0)) as __common_expr_1, d_year@2 as d_year, d_moy@3 as d_moy, d_qoy@4 as d_qoy, s_store_id@5 as s_store_id, i_brand@6 as i_brand, i_class@7 as i_class, i_category@8 as i_category, i_product_name@9 as i_product_name] +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_sales_price@7, ss_quantity@6, d_year@8, d_moy@9, d_qoy@10, s_store_id@11, i_brand@1, i_class@2, i_category@3, i_product_name@4] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_class, i_category, i_product_name], file_type=vortex +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@2, ss_quantity@4, ss_sales_price@5, d_year@6, d_moy@7, d_qoy@8, s_store_id@1] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id], file_type=vortex +17)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@5, ss_store_sk@6, ss_quantity@7, ss_sales_price@8, d_year@1, d_moy@2, d_qoy@3] +18)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_moy, d_qoy], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +19)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_quantity, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no new file mode 100644 index 00000000000..3214f282971 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_last_name, + c_first_name, + ca_city, + bought_city, + ss_ticket_number, + extended_price, + extended_tax, + list_price +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + ca_city bought_city, + sum(ss_ext_sales_price) extended_price, + sum(ss_ext_list_price) list_price, + sum(ss_ext_tax) extended_tax + FROM store_sales, + date_dim, + store, + household_demographics, + customer_address + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND store_sales.ss_addr_sk = customer_address.ca_address_sk + AND date_dim.d_dom BETWEEN 1 AND 2 + AND (household_demographics.hd_dep_count = 4 + OR household_demographics.hd_vehicle_count= 3) + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_city IN ('Fairview', + 'Midway') + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + ca_city) dn, + customer, + customer_address current_addr +WHERE ss_customer_sk = c_customer_sk + AND customer.c_current_addr_sk = current_addr.ca_address_sk + AND current_addr.ca_city <> bought_city +ORDER BY c_last_name NULLS FIRST, + ss_ticket_number NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_last_name ASC NULLS FIRST, dn.ss_ticket_number ASC NULLS FIRST, fetch=100 +02)--Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.extended_price, dn.extended_tax, dn.list_price +03)----Inner Join: customer.c_current_addr_sk = current_addr.ca_address_sk Filter: dn.bought_city != current_addr.ca_city +04)------Projection: dn.ss_ticket_number, dn.bought_city, dn.extended_price, dn.list_price, dn.extended_tax, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name +05)--------Inner Join: dn.ss_customer_sk = customer.c_customer_sk +06)----------SubqueryAlias: dn +07)------------Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_ext_sales_price) AS extended_price, sum(store_sales.ss_ext_list_price) AS list_price, sum(store_sales.ss_ext_tax) AS extended_tax +08)--------------Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)]] +09)----------------Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, customer_address.ca_city +10)------------------Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk +11)--------------------Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax +12)----------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +13)------------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax +14)--------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +15)----------------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax +16)------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +17)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_ext_sales_price, ss_ext_list_price, ss_ext_tax] +18)--------------------------------Projection: date_dim.d_date_sk +19)----------------------------------Filter: date_dim.d_dom >= Int64(1) AND date_dim.d_dom <= Int64(2) AND (date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)) +20)------------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_dom], partial_filters=[date_dim.d_dom >= Int64(1), date_dim.d_dom <= Int64(2), date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +21)----------------------------Projection: store.s_store_sk +22)------------------------------Filter: store.s_city = Utf8View("Fairview") OR store.s_city = Utf8View("Midway") +23)--------------------------------TableScan: store projection=[s_store_sk, s_city], partial_filters=[store.s_city = Utf8View("Fairview") OR store.s_city = Utf8View("Midway")] +24)------------------------Projection: household_demographics.hd_demo_sk +25)--------------------------Filter: household_demographics.hd_dep_count = Int64(4) OR household_demographics.hd_vehicle_count = Int32(3) +26)----------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) OR household_demographics.hd_vehicle_count = Int32(3)] +27)--------------------TableScan: customer_address projection=[ca_address_sk, ca_city] +28)----------TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] +29)------SubqueryAlias: current_addr +30)--------TableScan: customer_address projection=[ca_address_sk, ca_city] +physical_plan +01)SortPreservingMergeExec: [c_last_name@0 ASC, ss_ticket_number@4 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC, ss_ticket_number@4 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@5)], filter=bought_city@0 != ca_city@1, projection=[c_last_name@9, c_first_name@8, ca_city@1, bought_city@3, ss_ticket_number@2, extended_price@4, extended_tax@6, list_price@5] +04)------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city], file_type=vortex +05)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[ss_ticket_number@4, bought_city@6, extended_price@7, list_price@8, extended_tax@9, c_current_addr_sk@1, c_first_name@2, c_last_name@3] +06)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name], file_type=vortex +07)--------ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ca_city@3 as bought_city, sum(store_sales.ss_ext_sales_price)@4 as extended_price, sum(store_sales.ss_ext_list_price)@5 as list_price, sum(store_sales.ss_ext_tax)@6 as extended_tax] +08)----------AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, ca_city@3 as ca_city], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)] +09)------------RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, ca_city@3], 4), input_partitions=4 +10)--------------AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, ca_city@6 as ca_city], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)] +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ss_addr_sk@1)], projection=[ss_customer_sk@2, ss_addr_sk@3, ss_ticket_number@4, ss_ext_sales_price@5, ss_ext_list_price@6, ss_ext_tax@7, ca_city@1] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city], file_type=vortex +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_customer_sk@1, ss_addr_sk@3, ss_ticket_number@4, ss_ext_sales_price@5, ss_ext_list_price@6, ss_ext_tax@7] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 OR hd_vehicle_count@4 = 3 +15)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_ticket_number@5, ss_ext_sales_price@6, ss_ext_list_price@7, ss_ext_tax@8] +16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_city@22 = Fairview OR s_city@22 = Midway +17)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_store_sk@5, ss_ticket_number@6, ss_ext_sales_price@7, ss_ext_list_price@8, ss_ext_tax@9] +18)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_dom@9 >= 1 AND d_dom@9 <= 2 AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001) +19)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_ext_sales_price, ss_ext_list_price, ss_ext_tax], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no new file mode 100644 index 00000000000..dc5871a7c54 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no @@ -0,0 +1,127 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3 +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND ca_state IN ('KY', + 'GA', + 'NM') + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2) + AND (NOT EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2) + AND NOT EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2)) +GROUP BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating +ORDER BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating +LIMIT 100; +---- +logical_plan +01)Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, fetch=100 +02)--Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(Int64(1)) AS count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(Int64(1)) AS count(*) AS cnt2, customer_demographics.cd_credit_rating, count(Int64(1)) AS count(*) AS cnt3 +03)----Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating]], aggr=[[count(Int64(1))]] +04)------Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating +05)--------LeftAnti Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk +06)----------LeftAnti Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk +07)------------LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk +08)--------------Projection: c.c_customer_sk, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating +09)----------------Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk +10)------------------Projection: c.c_customer_sk, c.c_current_cdemo_sk +11)--------------------Inner Join: c.c_current_addr_sk = ca.ca_address_sk +12)----------------------SubqueryAlias: c +13)------------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] +14)----------------------SubqueryAlias: ca +15)------------------------Projection: customer_address.ca_address_sk +16)--------------------------Filter: customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("GA") OR customer_address.ca_state = Utf8View("NM") +17)----------------------------TableScan: customer_address projection=[ca_address_sk, ca_state], partial_filters=[customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("GA") OR customer_address.ca_state = Utf8View("NM")] +18)------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating] +19)--------------SubqueryAlias: __correlated_sq_1 +20)----------------Projection: store_sales.ss_customer_sk +21)------------------LeftSemi Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +22)--------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] +23)--------------------Projection: date_dim.d_date_sk +24)----------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy >= Int64(4) AND date_dim.d_moy <= Int64(6) +25)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy >= Int64(4), date_dim.d_moy <= Int64(6)] +26)------------SubqueryAlias: __correlated_sq_2 +27)--------------Projection: web_sales.ws_bill_customer_sk +28)----------------LeftSemi Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +29)------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] +30)------------------Projection: date_dim.d_date_sk +31)--------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy >= Int64(4) AND date_dim.d_moy <= Int64(6) +32)----------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy >= Int64(4), date_dim.d_moy <= Int64(6)] +33)----------SubqueryAlias: __correlated_sq_3 +34)------------Projection: catalog_sales.cs_ship_customer_sk +35)--------------LeftSemi Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +36)----------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] +37)----------------Projection: date_dim.d_date_sk +38)------------------Filter: date_dim.d_year = Int64(2001) AND date_dim.d_moy >= Int64(4) AND date_dim.d_moy <= Int64(6) +39)--------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy >= Int64(4), date_dim.d_moy <= Int64(6)] +physical_plan +01)SortPreservingMergeExec: [cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, count(Int64(1))@5 as cnt1, cd_purchase_estimate@3 as cd_purchase_estimate, count(Int64(1))@5 as cnt2, cd_credit_rating@4 as cd_credit_rating, count(Int64(1))@5 as cnt3] +03)----SortExec: TopK(fetch=100), expr=[cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@3 ASC NULLS LAST, cd_credit_rating@4 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating], aggr=[count(Int64(1))] +05)--------RepartitionExec: partitioning=Hash([cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating], aggr=[count(Int64(1))] +07)------------HashJoinExec: mode=CollectLeft, join_type=LeftAnti, on=[(c_customer_sk@0, cs_ship_customer_sk@0)], projection=[cd_gender@1, cd_marital_status@2, cd_education_status@3, cd_purchase_estimate@4, cd_credit_rating@5] +08)--------------CoalescePartitionsExec +09)----------------HashJoinExec: mode=CollectLeft, join_type=LeftAnti, on=[(c_customer_sk@0, ws_bill_customer_sk@0)] +10)------------------CoalescePartitionsExec +11)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, cd_gender@3, cd_marital_status@4, cd_education_status@5, cd_purchase_estimate@6, cd_credit_rating@7] +14)--------------------------CoalescePartitionsExec +15)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@2)], projection=[c_customer_sk@1, c_current_cdemo_sk@2] +16)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_state@8 = KY OR ca_state@8 = GA OR ca_state@8 = NM +17)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +18)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk], file_type=vortex +19)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +20)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating], file_type=vortex +21)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@1] +22)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 >= 4 AND d_moy@8 <= 6 +23)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk], file_type=vortex +24)------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_customer_sk@1] +25)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 >= 4 AND d_moy@8 <= 6 +26)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk], file_type=vortex +27)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ship_customer_sk@1] +28)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2001 AND d_moy@8 >= 4 AND d_moy@8 <= 6 +29)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_ship_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no new file mode 100644 index 00000000000..8022e2be4a5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id, + avg(ss_quantity) agg1, + avg(ss_list_price) agg2, + avg(ss_coupon_amt) agg3, + avg(ss_sales_price) agg4 +FROM store_sales, + customer_demographics, + date_dim, + item, + promotion +WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND ss_cdemo_sk = cd_demo_sk + AND ss_promo_sk = p_promo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND (p_channel_email = 'N' + OR p_channel_event = 'N') + AND d_year = 2000 +GROUP BY i_item_id +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, fetch=100 +02)--Projection: item.i_item_id, avg(store_sales.ss_quantity) AS agg1, avg(store_sales.ss_list_price) AS agg2, avg(store_sales.ss_coupon_amt) AS agg3, avg(store_sales.ss_sales_price) AS agg4 +03)----Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(CAST(store_sales.ss_quantity AS Float64)), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)]] +04)------Projection: store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, item.i_item_id +05)--------Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk +06)----------Projection: store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, item.i_item_id +07)------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +08)--------------Projection: store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +09)----------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +10)------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt +11)--------------------Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk +12)----------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_promo_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] +13)----------------------Projection: customer_demographics.cd_demo_sk +14)------------------------Filter: customer_demographics.cd_gender = Utf8View("M") AND customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") +15)--------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_gender = Utf8View("M"), customer_demographics.cd_marital_status = Utf8View("S"), customer_demographics.cd_education_status = Utf8View("College")] +16)------------------Projection: date_dim.d_date_sk +17)--------------------Filter: date_dim.d_year = Int64(2000) +18)----------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +19)--------------TableScan: item projection=[i_item_sk, i_item_id] +20)----------Projection: promotion.p_promo_sk +21)------------Filter: promotion.p_channel_email = Utf8View("N") OR promotion.p_channel_event = Utf8View("N") +22)--------------TableScan: promotion projection=[p_promo_sk, p_channel_email, p_channel_event], partial_filters=[promotion.p_channel_email = Utf8View("N") OR promotion.p_channel_event = Utf8View("N")] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 +02)--ProjectionExec: expr=[i_item_id@0 as i_item_id, avg(store_sales.ss_quantity)@1 as agg1, avg(store_sales.ss_list_price)@2 as agg2, avg(store_sales.ss_coupon_amt)@3 as agg3, avg(store_sales.ss_sales_price)@4 as agg4] +03)----SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] +05)--------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_id@4 as i_item_id], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ss_promo_sk@0)], projection=[ss_quantity@2, ss_list_price@3, ss_sales_price@4, ss_coupon_amt@5, i_item_id@6] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_email@9 = N OR p_channel_event@14 = N +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_promo_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7, i_item_id@1] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_promo_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, ss_cdemo_sk@2)], projection=[ss_sold_date_sk@1, ss_item_sk@2, ss_promo_sk@4, ss_quantity@5, ss_list_price@6, ss_sales_price@7, ss_coupon_amt@8] +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_gender@1 = M AND cd_marital_status@2 = S AND cd_education_status@3 = College +15)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_promo_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no new file mode 100644 index 00000000000..6000b9b4432 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no @@ -0,0 +1,105 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT sum(ss_net_profit) AS total_sum, + s_state, + s_county, + grouping(s_state)+grouping(s_county) AS lochierarchy, + rank() OVER (PARTITION BY grouping(s_state)+grouping(s_county), + CASE + WHEN grouping(s_county) = 0 THEN s_state + END + ORDER BY sum(ss_net_profit) DESC) AS rank_within_parent +FROM store_sales, + date_dim d1, + store +WHERE d1.d_month_seq BETWEEN 1200 AND 1200+11 + AND d1.d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + AND s_state IN + (SELECT s_state + FROM + (SELECT s_state AS s_state, + rank() OVER (PARTITION BY s_state + ORDER BY sum(ss_net_profit) DESC) AS ranking + FROM store_sales, + store, + date_dim + WHERE d_month_seq BETWEEN 1200 AND 1200+11 + AND d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + GROUP BY s_state) tmp1 + WHERE ranking <= 5 ) +GROUP BY rollup(s_state,s_county) +ORDER BY lochierarchy DESC , + CASE + WHEN grouping(s_state)+grouping(s_county) = 0 THEN s_state + END , + rank_within_parent +LIMIT 100; +---- +logical_plan +01)Sort: lochierarchy DESC NULLS FIRST, CASE WHEN lochierarchy = Int32(0) THEN store.s_state END AS CASE WHEN lochierarchy = Int64(0) THEN store.s_state END ASC NULLS LAST, rank_within_parent ASC NULLS LAST, fetch=100 +02)--Projection: sum(store_sales.ss_net_profit) AS total_sum, store.s_state, store.s_county, grouping(store.s_state) + grouping(store.s_county) AS lochierarchy, rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent +03)----WindowAggr: windowExpr=[[rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int32(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +04)------Projection: store.s_state, store.s_county, sum(store_sales.ss_net_profit), CAST(__grouping_id & UInt8(2) >> UInt8(1) AS Int32) AS grouping(store.s_state), CAST(__grouping_id & UInt8(1) AS Int32) AS grouping(store.s_county) +05)--------Aggregate: groupBy=[[ROLLUP (store.s_state, store.s_county)]], aggr=[[sum(store_sales.ss_net_profit)]] +06)----------LeftSemi Join: store.s_state = __correlated_sq_1.s_state +07)------------Projection: store_sales.ss_net_profit, store.s_county, store.s_state +08)--------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +09)----------------Projection: store_sales.ss_store_sk, store_sales.ss_net_profit +10)------------------Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk +11)--------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] +12)--------------------SubqueryAlias: d1 +13)----------------------Projection: date_dim.d_date_sk +14)------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +15)--------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +16)----------------TableScan: store projection=[s_store_sk, s_county, s_state] +17)------------SubqueryAlias: __correlated_sq_1 +18)--------------SubqueryAlias: tmp1 +19)----------------Projection: store.s_state +20)------------------Filter: rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(5) +21)--------------------Projection: store.s_state, rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +22)----------------------WindowAggr: windowExpr=[[rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +23)------------------------Aggregate: groupBy=[[store.s_state]], aggr=[[sum(store_sales.ss_net_profit)]] +24)--------------------------Projection: store_sales.ss_net_profit, store.s_state +25)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +26)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_net_profit, store.s_state +27)--------------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +28)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] +29)----------------------------------TableScan: store projection=[s_store_sk, s_state] +30)------------------------------Projection: date_dim.d_date_sk +31)--------------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +32)----------------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +physical_plan +01)SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN s_state@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN s_state@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[sum(store_sales.ss_net_profit)@2 as total_sum, s_state@0 as s_state, s_county@1 as s_county, grouping(store.s_state)@3 + grouping(store.s_county)@4 as lochierarchy, rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as rank_within_parent] +04)------BoundedWindowAggExec: wdw=[rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +05)--------SortExec: expr=[grouping(store.s_state)@3 + grouping(store.s_county)@4 ASC NULLS LAST, CASE WHEN grouping(store.s_county)@4 = 0 THEN s_state@0 END ASC NULLS LAST, sum(store_sales.ss_net_profit)@2 DESC], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([grouping(store.s_state)@3 + grouping(store.s_county)@4, CASE WHEN grouping(store.s_county)@4 = 0 THEN s_state@0 END], 4), input_partitions=4 +07)------------ProjectionExec: expr=[s_state@0 as s_state, s_county@1 as s_county, sum(store_sales.ss_net_profit)@3 as sum(store_sales.ss_net_profit), CAST(__grouping_id@2 & 2 >> 1 AS Int32) as grouping(store.s_state), CAST(__grouping_id@2 & 1 AS Int32) as grouping(store.s_county)] +08)--------------AggregateExec: mode=FinalPartitioned, gby=[s_state@0 as s_state, s_county@1 as s_county, __grouping_id@2 as __grouping_id], aggr=[sum(store_sales.ss_net_profit)] +09)----------------RepartitionExec: partitioning=Hash([s_state@0, s_county@1, __grouping_id@2], 4), input_partitions=4 +10)------------------AggregateExec: mode=Partial, gby=[(NULL as s_state, NULL as s_county), (s_state@2 as s_state, NULL as s_county), (s_state@2 as s_state, s_county@1 as s_county)], aggr=[sum(store_sales.ss_net_profit)] +11)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(s_state@2, s_state@0)] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_net_profit@4, s_county@1, s_state@2] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_county, s_state], file_type=vortex +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_store_sk@2, ss_net_profit@3] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit], file_type=vortex +18)----------------------FilterExec: rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 <= 5, projection=[s_state@0] +19)------------------------ProjectionExec: expr=[s_state@0 as s_state, rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] +20)--------------------------BoundedWindowAggExec: wdw=[rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +21)----------------------------SortExec: expr=[s_state@0 ASC NULLS LAST, sum(store_sales.ss_net_profit)@1 DESC], preserve_partitioning=[true] +22)------------------------------AggregateExec: mode=FinalPartitioned, gby=[s_state@0 as s_state], aggr=[sum(store_sales.ss_net_profit)] +23)--------------------------------RepartitionExec: partitioning=Hash([s_state@0], 4), input_partitions=4 +24)----------------------------------AggregateExec: mode=Partial, gby=[s_state@1 as s_state], aggr=[sum(store_sales.ss_net_profit)] +25)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_net_profit@2, s_state@3] +26)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +27)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_sold_date_sk@2, ss_net_profit@4, s_state@1] +28)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_state], file_type=vortex +29)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no new file mode 100644 index 00000000000..486b9272d07 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_brand_id brand_id, + i_brand brand, + t_hour, + t_minute, + sum(ext_price) ext_price +FROM item, + (SELECT ws_ext_sales_price AS ext_price, + ws_sold_date_sk AS sold_date_sk, + ws_item_sk AS sold_item_sk, + ws_sold_time_sk AS time_sk + FROM web_sales, + date_dim + WHERE d_date_sk = ws_sold_date_sk + AND d_moy=11 + AND d_year=1999 + UNION ALL SELECT cs_ext_sales_price AS ext_price, + cs_sold_date_sk AS sold_date_sk, + cs_item_sk AS sold_item_sk, + cs_sold_time_sk AS time_sk + FROM catalog_sales, + date_dim + WHERE d_date_sk = cs_sold_date_sk + AND d_moy=11 + AND d_year=1999 + UNION ALL SELECT ss_ext_sales_price AS ext_price, + ss_sold_date_sk AS sold_date_sk, + ss_item_sk AS sold_item_sk, + ss_sold_time_sk AS time_sk + FROM store_sales, + date_dim + WHERE d_date_sk = ss_sold_date_sk + AND d_moy=11 + AND d_year=1999 ) tmp, + time_dim +WHERE sold_item_sk = i_item_sk + AND i_manager_id=1 + AND time_sk = t_time_sk + AND (t_meal_time = 'breakfast' + OR t_meal_time = 'dinner') +GROUP BY i_brand, + i_brand_id, + t_hour, + t_minute +ORDER BY ext_price DESC NULLS FIRST, + i_brand_id NULLS FIRST, + t_hour NULLS FIRST; +---- +logical_plan +01)Sort: ext_price DESC NULLS FIRST, brand_id ASC NULLS FIRST, time_dim.t_hour ASC NULLS FIRST +02)--Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, time_dim.t_hour, time_dim.t_minute, sum(tmp.ext_price) AS ext_price +03)----Aggregate: groupBy=[[item.i_brand, item.i_brand_id, time_dim.t_hour, time_dim.t_minute]], aggr=[[sum(tmp.ext_price)]] +04)------Projection: item.i_brand_id, item.i_brand, tmp.ext_price, time_dim.t_hour, time_dim.t_minute +05)--------Inner Join: tmp.time_sk = time_dim.t_time_sk +06)----------Projection: item.i_brand_id, item.i_brand, tmp.ext_price, tmp.time_sk +07)------------Inner Join: item.i_item_sk = tmp.sold_item_sk +08)--------------Projection: item.i_item_sk, item.i_brand_id, item.i_brand +09)----------------Filter: item.i_manager_id = Int64(1) +10)------------------TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manager_id], partial_filters=[item.i_manager_id = Int64(1)] +11)--------------SubqueryAlias: tmp +12)----------------Union +13)------------------Projection: web_sales.ws_ext_sales_price AS ext_price, web_sales.ws_item_sk AS sold_item_sk, web_sales.ws_sold_time_sk AS time_sk +14)--------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +15)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_item_sk, ws_ext_sales_price] +16)----------------------Projection: date_dim.d_date_sk +17)------------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1999) +18)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1999)] +19)------------------Projection: catalog_sales.cs_ext_sales_price AS ext_price, catalog_sales.cs_item_sk AS sold_item_sk, catalog_sales.cs_sold_time_sk AS time_sk +20)--------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +21)----------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_item_sk, cs_ext_sales_price] +22)----------------------Projection: date_dim.d_date_sk +23)------------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1999) +24)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1999)] +25)------------------Projection: store_sales.ss_ext_sales_price AS ext_price, store_sales.ss_item_sk AS sold_item_sk, store_sales.ss_sold_time_sk AS time_sk +26)--------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +27)----------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_ext_sales_price] +28)----------------------Projection: date_dim.d_date_sk +29)------------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1999) +30)--------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1999)] +31)----------Projection: time_dim.t_time_sk, time_dim.t_hour, time_dim.t_minute +32)------------Filter: time_dim.t_meal_time = Utf8View("breakfast") OR time_dim.t_meal_time = Utf8View("dinner") +33)--------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute, t_meal_time], partial_filters=[time_dim.t_meal_time = Utf8View("breakfast") OR time_dim.t_meal_time = Utf8View("dinner")] +physical_plan +01)SortPreservingMergeExec: [ext_price@4 DESC, brand_id@0 ASC, t_hour@2 ASC] +02)--ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, t_hour@2 as t_hour, t_minute@3 as t_minute, sum(tmp.ext_price)@4 as ext_price] +03)----SortExec: expr=[sum(tmp.ext_price)@4 DESC, i_brand_id@1 ASC, t_hour@2 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id, t_hour@2 as t_hour, t_minute@3 as t_minute], aggr=[sum(tmp.ext_price)] +05)--------RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1, t_hour@2, t_minute@3], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_brand@1 as i_brand, i_brand_id@0 as i_brand_id, t_hour@3 as t_hour, t_minute@4 as t_minute], aggr=[sum(tmp.ext_price)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(time_sk@3, t_time_sk@0)], projection=[i_brand_id@0, i_brand@1, ext_price@2, t_hour@5, t_minute@6] +08)--------------CoalescePartitionsExec +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, sold_item_sk@1)], projection=[i_brand_id@1, i_brand@2, ext_price@3, time_sk@5] +10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_brand], file_type=vortex, predicate: i_manager_id@20 = 1 +11)------------------UnionExec +12)--------------------ProjectionExec: expr=[ws_ext_sales_price@0 as ext_price, ws_item_sk@1 as sold_item_sk, ws_sold_time_sk@2 as time_sk] +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_ext_sales_price@4, ws_item_sk@3, ws_sold_time_sk@2] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1999 +15)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_sold_time_sk, ws_item_sk, ws_ext_sales_price], file_type=vortex +16)--------------------ProjectionExec: expr=[cs_ext_sales_price@0 as ext_price, cs_item_sk@1 as sold_item_sk, cs_sold_time_sk@2 as time_sk] +17)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ext_sales_price@4, cs_item_sk@3, cs_sold_time_sk@2] +18)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1999 +19)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_sold_time_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex +20)--------------------ProjectionExec: expr=[ss_ext_sales_price@0 as ext_price, ss_item_sk@1 as sold_item_sk, ss_sold_time_sk@2 as time_sk] +21)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_ext_sales_price@4, ss_item_sk@3, ss_sold_time_sk@2] +22)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1999 +23)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex +24)--------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +25)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk, t_hour, t_minute], file_type=vortex, predicate: t_meal_time@9 = breakfast OR t_meal_time@9 = dinner diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no new file mode 100644 index 00000000000..7516f48e8f1 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no @@ -0,0 +1,120 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_desc, + w_warehouse_name, + d1.d_week_seq, + sum(CASE + WHEN p_promo_sk IS NULL THEN 1 + ELSE 0 + END) no_promo, + sum(CASE + WHEN p_promo_sk IS NOT NULL THEN 1 + ELSE 0 + END) promo, + count(*) total_cnt +FROM catalog_sales +JOIN inventory ON (cs_item_sk = inv_item_sk) +JOIN warehouse ON (w_warehouse_sk=inv_warehouse_sk) +JOIN item ON (i_item_sk = cs_item_sk) +JOIN customer_demographics ON (cs_bill_cdemo_sk = cd_demo_sk) +JOIN household_demographics ON (cs_bill_hdemo_sk = hd_demo_sk) +JOIN date_dim d1 ON (cs_sold_date_sk = d1.d_date_sk) +JOIN date_dim d2 ON (inv_date_sk = d2.d_date_sk) +JOIN date_dim d3 ON (cs_ship_date_sk = d3.d_date_sk) +LEFT OUTER JOIN promotion ON (cs_promo_sk=p_promo_sk) +LEFT OUTER JOIN catalog_returns ON (cr_item_sk = cs_item_sk + AND cr_order_number = cs_order_number) +WHERE d1.d_week_seq = d2.d_week_seq + AND inv_quantity_on_hand < cs_quantity + AND d3.d_date > (d1.d_date + INTERVAL '5' DAY) + AND hd_buy_potential = '>10000' + AND d1.d_year = 1999 + AND cd_marital_status = 'D' +GROUP BY i_item_desc, + w_warehouse_name, + d1.d_week_seq +ORDER BY total_cnt DESC NULLS FIRST, + i_item_desc NULLS FIRST, + w_warehouse_name NULLS FIRST, + d1.d_week_seq NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: total_cnt DESC NULLS FIRST, item.i_item_desc ASC NULLS FIRST, warehouse.w_warehouse_name ASC NULLS FIRST, d1.d_week_seq ASC NULLS FIRST, fetch=100 +02)--Projection: item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS promo, count(Int64(1)) AS count(*) AS total_cnt +03)----Aggregate: groupBy=[[item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq]], aggr=[[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(Int64(1))]] +04)------Projection: warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq, promotion.p_promo_sk +05)--------Left Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number +06)----------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq, promotion.p_promo_sk +07)------------Left Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk +08)--------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq +09)----------------Inner Join: catalog_sales.cs_ship_date_sk = d3.d_date_sk Filter: d3.d_date > d1.d_date + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 5, nanoseconds: 0 }") +10)------------------Projection: catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_date, d1.d_week_seq +11)--------------------Inner Join: inventory.inv_date_sk = d2.d_date_sk, d1.d_week_seq = d2.d_week_seq +12)----------------------Projection: catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc, d1.d_date, d1.d_week_seq +13)------------------------Inner Join: catalog_sales.cs_sold_date_sk = d1.d_date_sk +14)--------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc +15)----------------------------Inner Join: catalog_sales.cs_bill_hdemo_sk = household_demographics.hd_demo_sk +16)------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc +17)--------------------------------Inner Join: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk +18)----------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc +19)------------------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +20)--------------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name +21)----------------------------------------Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk +22)------------------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, inventory.inv_warehouse_sk +23)--------------------------------------------Inner Join: catalog_sales.cs_item_sk = inventory.inv_item_sk Filter: CAST(inventory.inv_quantity_on_hand AS Int64) < catalog_sales.cs_quantity +24)----------------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity] +25)----------------------------------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] +26)------------------------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +27)--------------------------------------TableScan: item projection=[i_item_sk, i_item_desc] +28)----------------------------------Projection: customer_demographics.cd_demo_sk +29)------------------------------------Filter: customer_demographics.cd_marital_status = Utf8View("D") +30)--------------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status], partial_filters=[customer_demographics.cd_marital_status = Utf8View("D")] +31)------------------------------Projection: household_demographics.hd_demo_sk +32)--------------------------------Filter: household_demographics.hd_buy_potential = Utf8View(">10000") +33)----------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_buy_potential], partial_filters=[household_demographics.hd_buy_potential = Utf8View(">10000")] +34)--------------------------SubqueryAlias: d1 +35)----------------------------Projection: date_dim.d_date_sk, date_dim.d_date, date_dim.d_week_seq +36)------------------------------Filter: date_dim.d_year = Int64(1999) +37)--------------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_week_seq, d_year], partial_filters=[date_dim.d_year = Int64(1999)] +38)----------------------SubqueryAlias: d2 +39)------------------------TableScan: date_dim projection=[d_date_sk, d_week_seq] +40)------------------SubqueryAlias: d3 +41)--------------------TableScan: date_dim projection=[d_date_sk, d_date] +42)--------------TableScan: promotion projection=[p_promo_sk] +43)----------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] +physical_plan +01)SortPreservingMergeExec: [total_cnt@5 DESC, i_item_desc@0 ASC, w_warehouse_name@1 ASC, d_week_seq@2 ASC], fetch=100 +02)--ProjectionExec: expr=[i_item_desc@0 as i_item_desc, w_warehouse_name@1 as w_warehouse_name, d_week_seq@2 as d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END)@3 as no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@4 as promo, count(Int64(1))@5 as total_cnt] +03)----SortExec: TopK(fetch=100), expr=[count(Int64(1))@5 DESC, i_item_desc@0 ASC, w_warehouse_name@1 ASC, d_week_seq@2 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[i_item_desc@0 as i_item_desc, w_warehouse_name@1 as w_warehouse_name, d_week_seq@2 as d_week_seq], aggr=[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(Int64(1))] +05)--------RepartitionExec: partitioning=Hash([i_item_desc@0, w_warehouse_name@1, d_week_seq@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[i_item_desc@1 as i_item_desc, w_warehouse_name@0 as w_warehouse_name, d_week_seq@2 as d_week_seq], aggr=[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(Int64(1))] +07)------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(cr_item_sk@0, cs_item_sk@0), (cr_order_number@1, cs_order_number@1)], projection=[w_warehouse_name@4, i_item_desc@5, d_week_seq@6, p_promo_sk@7] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number], file_type=vortex +09)--------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(p_promo_sk@0, cs_promo_sk@1)], projection=[cs_item_sk@1, cs_order_number@3, w_warehouse_name@4, i_item_desc@5, d_week_seq@6, p_promo_sk@0] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_ship_date_sk@0)], filter=d_date@1 > d_date@0 + IntervalMonthDayNano { months: 0, days: 5, nanoseconds: 0 }, projection=[cs_item_sk@3, cs_promo_sk@4, cs_order_number@5, w_warehouse_name@6, i_item_desc@7, d_week_seq@9] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +13)------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, inv_date_sk@4), (d_week_seq@1, d_week_seq@8)], projection=[cs_ship_date_sk@2, cs_item_sk@3, cs_promo_sk@4, cs_order_number@5, w_warehouse_name@7, i_item_desc@8, d_date@9, d_week_seq@10] +14)--------------------RepartitionExec: partitioning=Hash([d_date_sk@0, d_week_seq@1], 4), input_partitions=1 +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq], file_type=vortex +16)--------------------RepartitionExec: partitioning=Hash([inv_date_sk@4, d_week_seq@8], 4), input_partitions=4 +17)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_ship_date_sk@4, cs_item_sk@5, cs_promo_sk@6, cs_order_number@7, inv_date_sk@8, w_warehouse_name@9, i_item_desc@10, d_date@1, d_week_seq@2] +18)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date, d_week_seq], file_type=vortex, predicate: d_year@6 = 1999 +19)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, cs_bill_hdemo_sk@2)], projection=[cs_sold_date_sk@1, cs_ship_date_sk@2, cs_item_sk@4, cs_promo_sk@5, cs_order_number@6, inv_date_sk@7, w_warehouse_name@8, i_item_desc@9] +20)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_buy_potential@2 = >10000 +21)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, cs_bill_cdemo_sk@2)], projection=[cs_sold_date_sk@1, cs_ship_date_sk@2, cs_bill_hdemo_sk@4, cs_item_sk@5, cs_promo_sk@6, cs_order_number@7, inv_date_sk@8, w_warehouse_name@9, i_item_desc@10] +22)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, predicate: cd_marital_status@2 = D +23)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@4)], projection=[cs_sold_date_sk@2, cs_ship_date_sk@3, cs_bill_cdemo_sk@4, cs_bill_hdemo_sk@5, cs_item_sk@6, cs_promo_sk@7, cs_order_number@8, inv_date_sk@9, w_warehouse_name@10, i_item_desc@1] +24)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_desc], file_type=vortex +25)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@0, inv_warehouse_sk@8)], projection=[cs_sold_date_sk@2, cs_ship_date_sk@3, cs_bill_cdemo_sk@4, cs_bill_hdemo_sk@5, cs_item_sk@6, cs_promo_sk@7, cs_order_number@8, inv_date_sk@9, w_warehouse_name@1] +26)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[w_warehouse_sk, w_warehouse_name], file_type=vortex +27)--------------------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_item_sk@1, cs_item_sk@4)], filter=CAST(inv_quantity_on_hand@1 AS Int64) < cs_quantity@0, projection=[cs_sold_date_sk@4, cs_ship_date_sk@5, cs_bill_cdemo_sk@6, cs_bill_hdemo_sk@7, cs_item_sk@8, cs_promo_sk@9, cs_order_number@10, inv_date_sk@0, inv_warehouse_sk@2] +28)----------------------------------RepartitionExec: partitioning=Hash([inv_item_sk@1], 4), input_partitions=1 +29)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand], file_type=vortex +30)----------------------------------RepartitionExec: partitioning=Hash([cs_item_sk@4], 4), input_partitions=4 +31)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_ship_date_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q73.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q73.slt.no new file mode 100644 index 00000000000..dfe0886291c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q73.slt.no @@ -0,0 +1,87 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_last_name, + c_first_name, + c_salutation, + c_preferred_cust_flag, + ss_ticket_number, + cnt +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + count(*) cnt + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND date_dim.d_dom BETWEEN 1 AND 2 + AND (household_demographics.hd_buy_potential = 'Unknown' + OR household_demographics.hd_buy_potential = '>10000') + AND household_demographics.hd_vehicle_count > 0 + AND CASE + WHEN household_demographics.hd_vehicle_count > 0 THEN (household_demographics.hd_dep_count*1.000)/ household_demographics.hd_vehicle_count + ELSE NULL + END > 1 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_county IN ('Orange County', + 'Bronx County', + 'Franklin Parish', + 'Williamson County') + GROUP BY ss_ticket_number, + ss_customer_sk) dj, + customer +WHERE ss_customer_sk = c_customer_sk + AND cnt BETWEEN 1 AND 5 +ORDER BY cnt DESC, + c_last_name ASC; +---- +logical_plan +01)Sort: dj.cnt DESC NULLS FIRST, customer.c_last_name ASC NULLS LAST +02)--Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dj.ss_ticket_number, dj.cnt +03)----Inner Join: dj.ss_customer_sk = customer.c_customer_sk +04)------SubqueryAlias: dj +05)--------Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(Int64(1)) AS count(*) AS cnt +06)----------Filter: count(Int64(1)) >= Int64(1) AND count(Int64(1)) <= Int64(5) +07)------------Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(Int64(1))]] +08)--------------Projection: store_sales.ss_customer_sk, store_sales.ss_ticket_number +09)----------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +10)------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_ticket_number +11)--------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +12)----------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] +15)--------------------------Projection: date_dim.d_date_sk +16)----------------------------Filter: date_dim.d_dom >= Int64(1) AND date_dim.d_dom <= Int64(2) AND (date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)) +17)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_dom], partial_filters=[date_dim.d_dom >= Int64(1), date_dim.d_dom <= Int64(2), date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +18)----------------------Projection: store.s_store_sk +19)------------------------Filter: store.s_county IN ([Utf8View("Orange County"), Utf8View("Bronx County"), Utf8View("Franklin Parish"), Utf8View("Williamson County")]) +20)--------------------------TableScan: store projection=[s_store_sk, s_county], partial_filters=[store.s_county IN ([Utf8View("Orange County"), Utf8View("Bronx County"), Utf8View("Franklin Parish"), Utf8View("Williamson County")])] +21)------------------Projection: household_demographics.hd_demo_sk +22)--------------------Filter: (household_demographics.hd_buy_potential = Utf8View("Unknown") OR household_demographics.hd_buy_potential = Utf8View(">10000")) AND household_demographics.hd_vehicle_count > Int32(0) AND CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN CAST(household_demographics.hd_dep_count AS Float64) / CAST(household_demographics.hd_vehicle_count AS Float64) ELSE Float64(NULL) END > Float64(1) +23)----------------------TableScan: household_demographics projection=[hd_demo_sk, hd_buy_potential, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_buy_potential = Utf8View("Unknown") OR household_demographics.hd_buy_potential = Utf8View(">10000"), household_demographics.hd_vehicle_count > Int32(0), CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN CAST(household_demographics.hd_dep_count AS Float64) / CAST(household_demographics.hd_vehicle_count AS Float64) ELSE Float64(NULL) END > Float64(1)] +24)------TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] +physical_plan +01)SortPreservingMergeExec: [cnt@5 DESC, c_last_name@0 ASC NULLS LAST] +02)--SortExec: expr=[cnt@5 DESC, c_last_name@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_last_name@3, c_first_name@2, c_salutation@1, c_preferred_cust_flag@4, ss_ticket_number@5, cnt@7] +04)------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag], file_type=vortex +05)------ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, count(Int64(1))@2 as cnt] +06)--------FilterExec: count(Int64(1))@2 >= 1 AND count(Int64(1))@2 <= 5 +07)----------AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk], aggr=[count(Int64(1))] +08)------------RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1], 4), input_partitions=4 +09)--------------AggregateExec: mode=Partial, gby=[ss_ticket_number@1 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk], aggr=[count(Int64(1))] +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_customer_sk@1, ss_ticket_number@3] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: (hd_buy_potential@2 = Unknown OR hd_buy_potential@2 = >10000) AND hd_vehicle_count@4 > 0 AND CASE WHEN hd_vehicle_count@4 > 0 THEN CAST(hd_dep_count@3 AS Float64) / CAST(hd_vehicle_count@4 AS Float64) END > 1 +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@2)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_ticket_number@4] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_county@23 IN (SET) ([Orange County, Bronx County, Franklin Parish, Williamson County]) +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_store_sk@4, ss_ticket_number@5] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_dom@9 >= 1 AND d_dom@9 <= 2 AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001) +16)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no new file mode 100644 index 00000000000..27f984affb4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no @@ -0,0 +1,178 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + d_year AS year_, + sum(ss_net_paid) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year IN (2001, + 2001+1) + GROUP BY c_customer_id, + c_first_name, + c_last_name, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + d_year AS year_, + sum(ws_net_paid) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year IN (2001, + 2001+1) + GROUP BY c_customer_id, + c_first_name, + c_last_name, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.year_ = 2001 + AND t_s_secyear.year_ = 2001+1 + AND t_w_firstyear.year_ = 2001 + AND t_w_secyear.year_ = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_w_firstyear.year_total > 0 THEN t_w_secyear.year_total / t_w_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN t_s_secyear.year_total / t_s_firstyear.year_total + ELSE NULL + END +ORDER BY 1 NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: t_s_secyear.customer_id ASC NULLS FIRST, fetch=100 +02)--Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name +03)----Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_w_firstyear.year_total > Decimal128(0.00,17,2) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE Decimal128(NULL,23,6) END > CASE WHEN t_s_firstyear.year_total > Decimal128(0.00,17,2) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE Decimal128(NULL,23,6) END +04)------Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.year_total, t_w_firstyear.year_total +05)--------Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id +06)----------Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id +07)------------SubqueryAlias: t_s_firstyear +08)--------------SubqueryAlias: year_total +09)----------------Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_net_paid) AS year_total +10)------------------Filter: sum(store_sales.ss_net_paid) > Decimal128(0.00,17,2) +11)--------------------Projection: customer.c_customer_id, sum(store_sales.ss_net_paid) +12)----------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[sum(store_sales.ss_net_paid)]] +13)------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year +14)--------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +15)----------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid +16)------------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +17)--------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], partial_filters=[Boolean(true)] +18)--------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] +19)----------------------------Filter: date_dim.d_year = Int64(2001) +20)------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002), date_dim.d_year = Int64(2001)] +21)------------SubqueryAlias: t_s_secyear +22)--------------SubqueryAlias: year_total +23)----------------Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, sum(store_sales.ss_net_paid) AS year_total +24)------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[sum(store_sales.ss_net_paid)]] +25)--------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year +26)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +27)------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid +28)--------------------------Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk +29)----------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], partial_filters=[Boolean(true)] +30)----------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] +31)------------------------Filter: (date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002)) AND date_dim.d_year = Int64(2002) +32)--------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002), date_dim.d_year = Int64(2002)] +33)----------SubqueryAlias: t_w_firstyear +34)------------SubqueryAlias: year_total +35)--------------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_net_paid) AS year_total +36)----------------Filter: sum(web_sales.ws_net_paid) > Decimal128(0.00,17,2) +37)------------------Projection: customer.c_customer_id, sum(web_sales.ws_net_paid) +38)--------------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[sum(web_sales.ws_net_paid)]] +39)----------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year +40)------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +41)--------------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid +42)----------------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +43)------------------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], partial_filters=[Boolean(true)] +44)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] +45)--------------------------Filter: date_dim.d_year = Int64(2001) +46)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002), date_dim.d_year = Int64(2001)] +47)------SubqueryAlias: t_w_secyear +48)--------SubqueryAlias: year_total +49)----------Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_net_paid) AS year_total +50)------------Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[sum(web_sales.ws_net_paid)]] +51)--------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year +52)----------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +53)------------------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid +54)--------------------Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk +55)----------------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], partial_filters=[Boolean(true)] +56)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] +57)------------------Filter: (date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002)) AND date_dim.d_year = Int64(2002) +58)--------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2002), date_dim.d_year = Int64(2002)] +physical_plan +01)SortPreservingMergeExec: [customer_id@0 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[customer_id@0 ASC], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > 0.00 THEN year_total@3 / year_total@2 END > CASE WHEN year_total@0 > 0.00 THEN year_total@1 / year_total@0 END, projection=[customer_id@2, customer_first_name@3, customer_last_name@4] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@2, year_total@3, customer_id@4, customer_first_name@5, customer_last_name@6, year_total@7, year_total@1] +06)----------CoalescePartitionsExec +07)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_net_paid)@1 as year_total] +08)--------------FilterExec: sum(web_sales.ws_net_paid)@1 > 0.00 +09)----------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_net_paid)@4 as sum(web_sales.ws_net_paid)] +10)------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[sum(web_sales.ws_net_paid)], ordering_mode=PartiallySorted([3]) +11)--------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[sum(web_sales.ws_net_paid)], ordering_mode=PartiallySorted([3]) +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@3)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, ws_net_paid@6, d_year@1] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], file_type=vortex +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid], file_type=vortex +18)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(customer_id@0, customer_id@0)] +19)------------CoalescePartitionsExec +20)--------------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_net_paid)@1 as year_total] +21)----------------FilterExec: sum(store_sales.ss_net_paid)@1 > 0.00 +22)------------------ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_net_paid)@4 as sum(store_sales.ss_net_paid)] +23)--------------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([3]) +24)----------------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 4), input_partitions=4 +25)------------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([3]) +26)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@3)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, ss_net_paid@6, d_year@1] +27)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +28)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] +29)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], file_type=vortex +30)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid], file_type=vortex +31)------------ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, sum(store_sales.ss_net_paid)@4 as year_total] +32)--------------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([3]) +33)----------------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 4), input_partitions=4 +34)------------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[sum(store_sales.ss_net_paid)], ordering_mode=PartiallySorted([3]) +35)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@3)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, ss_net_paid@6, d_year@1] +36)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: (d_year@6 = 2001 OR d_year@6 = 2002) AND d_year@6 = 2002 +37)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] +38)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], file_type=vortex +39)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid], file_type=vortex +40)------ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_net_paid)@4 as year_total] +41)--------AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[sum(web_sales.ws_net_paid)], ordering_mode=PartiallySorted([3]) +42)----------RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 4), input_partitions=4 +43)------------AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[sum(web_sales.ws_net_paid)], ordering_mode=PartiallySorted([3]) +44)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@3)], projection=[c_customer_id@2, c_first_name@3, c_last_name@4, ws_net_paid@6, d_year@1] +45)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: (d_year@6 = 2001 OR d_year@6 = 2002) AND d_year@6 = 2002 +46)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] +47)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], file_type=vortex +48)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no new file mode 100644 index 00000000000..9f966a8eecb --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no @@ -0,0 +1,270 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH all_sales AS + ( SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + SUM(sales_cnt) AS sales_cnt , + SUM(sales_amt) AS sales_amt + FROM + (SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + cs_quantity - COALESCE(cr_return_quantity,0) AS sales_cnt , + cs_ext_sales_price - COALESCE(cr_return_amount,0.0) AS sales_amt + FROM catalog_sales + JOIN item ON i_item_sk=cs_item_sk + JOIN date_dim ON d_date_sk=cs_sold_date_sk + LEFT JOIN catalog_returns ON (cs_order_number=cr_order_number + AND cs_item_sk=cr_item_sk) + WHERE i_category='Books' + UNION SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + ss_quantity - COALESCE(sr_return_quantity,0) AS sales_cnt , + ss_ext_sales_price - COALESCE(sr_return_amt,0.0) AS sales_amt + FROM store_sales + JOIN item ON i_item_sk=ss_item_sk + JOIN date_dim ON d_date_sk=ss_sold_date_sk + LEFT JOIN store_returns ON (ss_ticket_number=sr_ticket_number + AND ss_item_sk=sr_item_sk) + WHERE i_category='Books' + UNION SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + ws_quantity - COALESCE(wr_return_quantity,0) AS sales_cnt , + ws_ext_sales_price - COALESCE(wr_return_amt,0.0) AS sales_amt + FROM web_sales + JOIN item ON i_item_sk=ws_item_sk + JOIN date_dim ON d_date_sk=ws_sold_date_sk + LEFT JOIN web_returns ON (ws_order_number=wr_order_number + AND ws_item_sk=wr_item_sk) + WHERE i_category='Books') sales_detail + GROUP BY d_year, + i_brand_id, + i_class_id, + i_category_id, + i_manufact_id) +SELECT prev_yr.d_year AS prev_year , + curr_yr.d_year AS year_ , + curr_yr.i_brand_id , + curr_yr.i_class_id , + curr_yr.i_category_id , + curr_yr.i_manufact_id , + prev_yr.sales_cnt AS prev_yr_cnt , + curr_yr.sales_cnt AS curr_yr_cnt , + curr_yr.sales_cnt-prev_yr.sales_cnt AS sales_cnt_diff , + curr_yr.sales_amt-prev_yr.sales_amt AS sales_amt_diff +FROM all_sales curr_yr, + all_sales prev_yr +WHERE curr_yr.i_brand_id=prev_yr.i_brand_id + AND curr_yr.i_class_id=prev_yr.i_class_id + AND curr_yr.i_category_id=prev_yr.i_category_id + AND curr_yr.i_manufact_id=prev_yr.i_manufact_id + AND curr_yr.d_year=2002 + AND prev_yr.d_year=2002-1 + AND CAST(curr_yr.sales_cnt AS DECIMAL(17,2))/CAST(prev_yr.sales_cnt AS DECIMAL(17,2))<0.9 +ORDER BY sales_cnt_diff, + sales_amt_diff +LIMIT 100; +---- +logical_plan +01)Sort: sales_cnt_diff ASC NULLS LAST, sales_amt_diff ASC NULLS LAST, fetch=100 +02)--Projection: prev_yr.d_year AS prev_year, curr_yr.d_year AS year_, curr_yr.i_brand_id, curr_yr.i_class_id, curr_yr.i_category_id, curr_yr.i_manufact_id, prev_yr.sales_cnt AS prev_yr_cnt, curr_yr.sales_cnt AS curr_yr_cnt, curr_yr.sales_cnt - prev_yr.sales_cnt AS sales_cnt_diff, curr_yr.sales_amt - prev_yr.sales_amt AS sales_amt_diff +03)----Inner Join: curr_yr.i_brand_id = prev_yr.i_brand_id, curr_yr.i_class_id = prev_yr.i_class_id, curr_yr.i_category_id = prev_yr.i_category_id, curr_yr.i_manufact_id = prev_yr.i_manufact_id Filter: CAST(curr_yr.sales_cnt AS Decimal128(17, 2)) / CAST(prev_yr.sales_cnt AS Decimal128(17, 2)) < Decimal128(0.900000,23,6) +04)------SubqueryAlias: curr_yr +05)--------SubqueryAlias: all_sales +06)----------Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt +07)------------Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] +08)--------------SubqueryAlias: sales_detail +09)----------------Aggregate: groupBy=[[d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id, sales_cnt, sales_amt]], aggr=[[]] +10)------------------Union +11)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, catalog_sales.cs_quantity - CASE WHEN catalog_returns.cr_return_quantity IS NOT NULL THEN catalog_returns.cr_return_quantity ELSE Int64(0) END AS sales_cnt, catalog_sales.cs_ext_sales_price - CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +12)----------------------Projection: CAST(catalog_returns.cr_return_amount AS Decimal128(30, 15)) AS __common_expr_1, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, catalog_returns.cr_return_quantity +13)------------------------Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk +14)--------------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +15)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +16)------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +17)--------------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +18)----------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] +19)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +20)------------------------------------Filter: item.i_category = Utf8View("Books") +21)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +22)------------------------------Filter: date_dim.d_year = Int64(2002) +23)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +24)--------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] +25)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, store_sales.ss_quantity - CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN store_returns.sr_return_quantity ELSE Int64(0) END AS sales_cnt, store_sales.ss_ext_sales_price - CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +26)----------------------Projection: CAST(store_returns.sr_return_amt AS Decimal128(30, 15)) AS __common_expr_2, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, store_returns.sr_return_quantity +27)------------------------Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk +28)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +29)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +30)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +31)--------------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +32)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] +33)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +34)------------------------------------Filter: item.i_category = Utf8View("Books") +35)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +36)------------------------------Filter: date_dim.d_year = Int64(2002) +37)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +38)--------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] +39)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, web_sales.ws_quantity - CASE WHEN web_returns.wr_return_quantity IS NOT NULL THEN web_returns.wr_return_quantity ELSE Int64(0) END AS sales_cnt, web_sales.ws_ext_sales_price - CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +40)----------------------Projection: CAST(web_returns.wr_return_amt AS Decimal128(30, 15)) AS __common_expr_3, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, web_returns.wr_return_quantity +41)------------------------Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk +42)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +43)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +44)------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +45)--------------------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +46)----------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] +47)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +48)------------------------------------Filter: item.i_category = Utf8View("Books") +49)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +50)------------------------------Filter: date_dim.d_year = Int64(2002) +51)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2002)] +52)--------------------------TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] +53)------SubqueryAlias: prev_yr +54)--------SubqueryAlias: all_sales +55)----------Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt +56)------------Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] +57)--------------SubqueryAlias: sales_detail +58)----------------Aggregate: groupBy=[[d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id, sales_cnt, sales_amt]], aggr=[[]] +59)------------------Union +60)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, catalog_sales.cs_quantity - CASE WHEN catalog_returns.cr_return_quantity IS NOT NULL THEN catalog_returns.cr_return_quantity ELSE Int64(0) END AS sales_cnt, catalog_sales.cs_ext_sales_price - CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +61)----------------------Projection: CAST(catalog_returns.cr_return_amount AS Decimal128(30, 15)) AS __common_expr_4, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, catalog_returns.cr_return_quantity +62)------------------------Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk +63)--------------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +64)----------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +65)------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +66)--------------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +67)----------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] +68)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +69)------------------------------------Filter: item.i_category = Utf8View("Books") +70)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +71)------------------------------Filter: date_dim.d_year = Int64(2001) +72)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +73)--------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] +74)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, store_sales.ss_quantity - CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN store_returns.sr_return_quantity ELSE Int64(0) END AS sales_cnt, store_sales.ss_ext_sales_price - CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +75)----------------------Projection: CAST(store_returns.sr_return_amt AS Decimal128(30, 15)) AS __common_expr_5, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, store_returns.sr_return_quantity +76)------------------------Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk +77)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +78)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +79)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +80)--------------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +81)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] +82)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +83)------------------------------------Filter: item.i_category = Utf8View("Books") +84)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +85)------------------------------Filter: date_dim.d_year = Int64(2001) +86)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +87)--------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] +88)--------------------Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, web_sales.ws_quantity - CASE WHEN web_returns.wr_return_quantity IS NOT NULL THEN web_returns.wr_return_quantity ELSE Int64(0) END AS sales_cnt, web_sales.ws_ext_sales_price - CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE Decimal128(0.000000000000000,30,15) END AS sales_amt +89)----------------------Projection: CAST(web_returns.wr_return_amt AS Decimal128(30, 15)) AS __common_expr_6, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year, web_returns.wr_return_quantity +90)------------------------Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk +91)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year +92)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +93)------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +94)--------------------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +95)----------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] +96)----------------------------------Projection: item.i_item_sk, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id +97)------------------------------------Filter: item.i_category = Utf8View("Books") +98)--------------------------------------TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_category, i_manufact_id], partial_filters=[item.i_category = Utf8View("Books")] +99)------------------------------Filter: date_dim.d_year = Int64(2001) +100)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2001)] +101)--------------------------TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] +physical_plan +01)SortPreservingMergeExec: [sales_cnt_diff@8 ASC NULLS LAST, sales_amt_diff@9 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[sales_cnt_diff@8 ASC NULLS LAST, sales_amt_diff@9 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[d_year@0 as prev_year, d_year@1 as year_, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, sales_cnt@6 as prev_yr_cnt, sales_cnt@7 as curr_yr_cnt, sales_cnt@7 - sales_cnt@6 as sales_cnt_diff, sales_amt@8 - sales_amt@9 as sales_amt_diff] +04)------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_brand_id@1, i_brand_id@1), (i_class_id@2, i_class_id@2), (i_category_id@3, i_category_id@3), (i_manufact_id@4, i_manufact_id@4)], filter=CAST(sales_cnt@0 AS Decimal128(17, 2)) / CAST(sales_cnt@1 AS Decimal128(17, 2)) < 0.900000, projection=[d_year@7, d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@12, sales_cnt@5, sales_amt@6, sales_amt@13] +05)--------RepartitionExec: partitioning=Hash([i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 4), input_partitions=4 +06)----------ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sum(sales_detail.sales_cnt)@5 as sales_cnt, sum(sales_detail.sales_amt)@6 as sales_amt] +07)------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)], ordering_mode=PartiallySorted([0]) +08)--------------RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)], ordering_mode=PartiallySorted([0]) +10)------------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[], ordering_mode=PartiallySorted([0]) +11)--------------------RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@5, sales_amt@6], 4), input_partitions=12 +12)----------------------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[], ordering_mode=PartiallySorted([0]) +13)------------------------UnionExec +14)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, cs_quantity@1 - CASE WHEN cr_return_quantity@8 IS NOT NULL THEN cr_return_quantity@8 ELSE 0 END as sales_cnt, cs_ext_sales_price@2 - CASE WHEN __common_expr_1@0 IS NOT NULL THEN __common_expr_1@0 ELSE 0.000000000000000 END as sales_amt] +15)----------------------------ProjectionExec: expr=[CAST(cr_return_amount@0 AS Decimal128(30, 15)) as __common_expr_1, cs_quantity@1 as cs_quantity, cs_ext_sales_price@2 as cs_ext_sales_price, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, d_year@7 as d_year, cr_return_quantity@8 as cr_return_quantity] +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(cs_order_number@1, cr_order_number@1), (cs_item_sk@0, cr_item_sk@0)], projection=[cr_return_amount@12, cs_quantity@2, cs_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, cr_return_quantity@11] +17)--------------------------------CoalescePartitionsExec +18)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@3, cs_order_number@4, cs_quantity@5, cs_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +19)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +20)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@5, cs_item_sk@6, cs_order_number@7, cs_quantity@8, cs_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +21)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +22)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price], file_type=vortex +23)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +24)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount], file_type=vortex +25)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, ss_quantity@1 - CASE WHEN sr_return_quantity@8 IS NOT NULL THEN sr_return_quantity@8 ELSE 0 END as sales_cnt, ss_ext_sales_price@2 - CASE WHEN __common_expr_2@0 IS NOT NULL THEN __common_expr_2@0 ELSE 0.000000000000000 END as sales_amt] +26)----------------------------ProjectionExec: expr=[CAST(sr_return_amt@0 AS Decimal128(30, 15)) as __common_expr_2, ss_quantity@1 as ss_quantity, ss_ext_sales_price@2 as ss_ext_sales_price, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, d_year@7 as d_year, sr_return_quantity@8 as sr_return_quantity] +27)------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(ss_ticket_number@1, sr_ticket_number@1), (ss_item_sk@0, sr_item_sk@0)], projection=[sr_return_amt@12, ss_quantity@2, ss_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, sr_return_quantity@11] +28)--------------------------------CoalescePartitionsExec +29)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_ticket_number@4, ss_quantity@5, ss_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +30)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +31)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@5, ss_item_sk@6, ss_ticket_number@7, ss_quantity@8, ss_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +32)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +33)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price], file_type=vortex +34)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt], file_type=vortex +35)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, ws_quantity@1 - CASE WHEN wr_return_quantity@8 IS NOT NULL THEN wr_return_quantity@8 ELSE 0 END as sales_cnt, ws_ext_sales_price@2 - CASE WHEN __common_expr_3@0 IS NOT NULL THEN __common_expr_3@0 ELSE 0.000000000000000 END as sales_amt] +36)----------------------------ProjectionExec: expr=[CAST(wr_return_amt@12 AS Decimal128(30, 15)) as __common_expr_3, ws_quantity@2 as ws_quantity, ws_ext_sales_price@3 as ws_ext_sales_price, i_brand_id@4 as i_brand_id, i_class_id@5 as i_class_id, i_category_id@6 as i_category_id, i_manufact_id@7 as i_manufact_id, d_year@8 as d_year, wr_return_quantity@11 as wr_return_quantity] +37)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +38)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(ws_order_number@1, wr_order_number@1), (ws_item_sk@0, wr_item_sk@0)] +39)----------------------------------CoalescePartitionsExec +40)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@3, ws_order_number@4, ws_quantity@5, ws_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +41)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2002 +42)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@5, ws_item_sk@6, ws_order_number@7, ws_quantity@8, ws_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +43)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +44)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price], file_type=vortex +45)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt], file_type=vortex +46)--------RepartitionExec: partitioning=Hash([i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 4), input_partitions=4 +47)----------ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sum(sales_detail.sales_cnt)@5 as sales_cnt, sum(sales_detail.sales_amt)@6 as sales_amt] +48)------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)], ordering_mode=PartiallySorted([0]) +49)--------------RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 4), input_partitions=4 +50)----------------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)], ordering_mode=PartiallySorted([0]) +51)------------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[], ordering_mode=PartiallySorted([0]) +52)--------------------RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@5, sales_amt@6], 4), input_partitions=12 +53)----------------------AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[], ordering_mode=PartiallySorted([0]) +54)------------------------UnionExec +55)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, cs_quantity@1 - CASE WHEN cr_return_quantity@8 IS NOT NULL THEN cr_return_quantity@8 ELSE 0 END as sales_cnt, cs_ext_sales_price@2 - CASE WHEN __common_expr_4@0 IS NOT NULL THEN __common_expr_4@0 ELSE 0.000000000000000 END as sales_amt] +56)----------------------------ProjectionExec: expr=[CAST(cr_return_amount@0 AS Decimal128(30, 15)) as __common_expr_4, cs_quantity@1 as cs_quantity, cs_ext_sales_price@2 as cs_ext_sales_price, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, d_year@7 as d_year, cr_return_quantity@8 as cr_return_quantity] +57)------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(cs_order_number@1, cr_order_number@1), (cs_item_sk@0, cr_item_sk@0)], projection=[cr_return_amount@12, cs_quantity@2, cs_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, cr_return_quantity@11] +58)--------------------------------CoalescePartitionsExec +59)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_item_sk@3, cs_order_number@4, cs_quantity@5, cs_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +60)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +61)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@5, cs_item_sk@6, cs_order_number@7, cs_quantity@8, cs_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +62)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +63)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price], file_type=vortex +64)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +65)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount], file_type=vortex +66)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, ss_quantity@1 - CASE WHEN sr_return_quantity@8 IS NOT NULL THEN sr_return_quantity@8 ELSE 0 END as sales_cnt, ss_ext_sales_price@2 - CASE WHEN __common_expr_5@0 IS NOT NULL THEN __common_expr_5@0 ELSE 0.000000000000000 END as sales_amt] +67)----------------------------ProjectionExec: expr=[CAST(sr_return_amt@0 AS Decimal128(30, 15)) as __common_expr_5, ss_quantity@1 as ss_quantity, ss_ext_sales_price@2 as ss_ext_sales_price, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, d_year@7 as d_year, sr_return_quantity@8 as sr_return_quantity] +68)------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(ss_ticket_number@1, sr_ticket_number@1), (ss_item_sk@0, sr_item_sk@0)], projection=[sr_return_amt@12, ss_quantity@2, ss_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, sr_return_quantity@11] +69)--------------------------------CoalescePartitionsExec +70)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_ticket_number@4, ss_quantity@5, ss_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +71)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +72)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@5, ss_item_sk@6, ss_ticket_number@7, ss_quantity@8, ss_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +73)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +74)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price], file_type=vortex +75)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt], file_type=vortex +76)--------------------------ProjectionExec: expr=[d_year@7 as d_year, i_brand_id@3 as i_brand_id, i_class_id@4 as i_class_id, i_category_id@5 as i_category_id, i_manufact_id@6 as i_manufact_id, ws_quantity@1 - CASE WHEN wr_return_quantity@8 IS NOT NULL THEN wr_return_quantity@8 ELSE 0 END as sales_cnt, ws_ext_sales_price@2 - CASE WHEN __common_expr_6@0 IS NOT NULL THEN __common_expr_6@0 ELSE 0.000000000000000 END as sales_amt] +77)----------------------------ProjectionExec: expr=[CAST(wr_return_amt@12 AS Decimal128(30, 15)) as __common_expr_6, ws_quantity@2 as ws_quantity, ws_ext_sales_price@3 as ws_ext_sales_price, i_brand_id@4 as i_brand_id, i_class_id@5 as i_class_id, i_category_id@6 as i_category_id, i_manufact_id@7 as i_manufact_id, d_year@8 as d_year, wr_return_quantity@11 as wr_return_quantity] +78)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +79)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Left, on=[(ws_order_number@1, wr_order_number@1), (ws_item_sk@0, wr_item_sk@0)] +80)----------------------------------CoalescePartitionsExec +81)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@3, ws_order_number@4, ws_quantity@5, ws_ext_sales_price@6, i_brand_id@7, i_class_id@8, i_category_id@9, i_manufact_id@10, d_year@1] +82)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2001 +83)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@5, ws_item_sk@6, ws_order_number@7, ws_quantity@8, ws_ext_sales_price@9, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4] +84)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], file_type=vortex, predicate: i_category@12 = Books +85)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price], file_type=vortex +86)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no new file mode 100644 index 00000000000..89632d78322 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no @@ -0,0 +1,126 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT channel, + col_name, + d_year, + d_qoy, + i_category, + COUNT(*) sales_cnt, + SUM(ext_sales_price) sales_amt +FROM + ( SELECT 'store' AS channel, + 'ss_store_sk' col_name, + d_year, + d_qoy, + i_category, + ss_ext_sales_price ext_sales_price + FROM store_sales, + item, + date_dim + WHERE ss_store_sk IS NULL + AND ss_sold_date_sk=d_date_sk + AND ss_item_sk=i_item_sk + UNION ALL SELECT 'web' AS channel, + 'ws_ship_customer_sk' col_name, + d_year, + d_qoy, + i_category, + ws_ext_sales_price ext_sales_price + FROM web_sales, + item, + date_dim + WHERE ws_ship_customer_sk IS NULL + AND ws_sold_date_sk=d_date_sk + AND ws_item_sk=i_item_sk + UNION ALL SELECT 'catalog' AS channel, + 'cs_ship_addr_sk' col_name, + d_year, + d_qoy, + i_category, + cs_ext_sales_price ext_sales_price + FROM catalog_sales, + item, + date_dim + WHERE cs_ship_addr_sk IS NULL + AND cs_sold_date_sk=d_date_sk + AND cs_item_sk=i_item_sk) foo +GROUP BY channel, + col_name, + d_year, + d_qoy, + i_category +ORDER BY channel NULLS FIRST, + col_name NULLS FIRST, + d_year NULLS FIRST, + d_qoy NULLS FIRST, + i_category NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: foo.channel ASC NULLS FIRST, foo.col_name ASC NULLS FIRST, foo.d_year ASC NULLS FIRST, foo.d_qoy ASC NULLS FIRST, foo.i_category ASC NULLS FIRST, fetch=100 +02)--Projection: foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category, count(Int64(1)) AS count(*) AS sales_cnt, sum(foo.ext_sales_price) AS sales_amt +03)----Aggregate: groupBy=[[foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category]], aggr=[[count(Int64(1)), sum(foo.ext_sales_price)]] +04)------SubqueryAlias: foo +05)--------Union +06)----------Projection: Utf8("store") AS channel, Utf8("ss_store_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, store_sales.ss_ext_sales_price AS ext_sales_price +07)------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +08)--------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_category +09)----------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +10)------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ext_sales_price +11)--------------------Filter: store_sales.ss_store_sk IS NULL +12)----------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price], partial_filters=[store_sales.ss_store_sk IS NULL] +13)------------------TableScan: item projection=[i_item_sk, i_category] +14)--------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] +15)----------Projection: Utf8("web") AS channel, Utf8("ws_ship_customer_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, web_sales.ws_ext_sales_price AS ext_sales_price +16)------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +17)--------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_category +18)----------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +19)------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_ext_sales_price +20)--------------------Filter: web_sales.ws_ship_customer_sk IS NULL +21)----------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ship_customer_sk, ws_ext_sales_price], partial_filters=[web_sales.ws_ship_customer_sk IS NULL] +22)------------------TableScan: item projection=[i_item_sk, i_category] +23)--------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] +24)----------Projection: Utf8("catalog") AS channel, Utf8("cs_ship_addr_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, catalog_sales.cs_ext_sales_price AS ext_sales_price +25)------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +26)--------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_category +27)----------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +28)------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price +29)--------------------Filter: catalog_sales.cs_ship_addr_sk IS NULL +30)----------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_addr_sk, cs_item_sk, cs_ext_sales_price], partial_filters=[catalog_sales.cs_ship_addr_sk IS NULL] +31)------------------TableScan: item projection=[i_item_sk, i_category] +32)--------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] +physical_plan +01)SortPreservingMergeExec: [channel@0 ASC, col_name@1 ASC, d_year@2 ASC, d_qoy@3 ASC, i_category@4 ASC], fetch=100 +02)--ProjectionExec: expr=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category, count(Int64(1))@5 as sales_cnt, sum(foo.ext_sales_price)@6 as sales_amt] +03)----SortExec: TopK(fetch=100), expr=[channel@0 ASC, col_name@1 ASC, d_year@2 ASC, d_qoy@3 ASC, i_category@4 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category], aggr=[count(Int64(1)), sum(foo.ext_sales_price)] +05)--------RepartitionExec: partitioning=Hash([channel@0, col_name@1, d_year@2, d_qoy@3, i_category@4], 4), input_partitions=12 +06)----------AggregateExec: mode=Partial, gby=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category], aggr=[count(Int64(1)), sum(foo.ext_sales_price)], ordering_mode=PartiallySorted([0, 1]) +07)------------UnionExec +08)--------------ProjectionExec: expr=[store as channel, ss_store_sk as col_name, d_year@0 as d_year, d_qoy@1 as d_qoy, i_category@2 as i_category, ss_ext_sales_price@3 as ext_sales_price] +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[d_year@4, d_qoy@5, i_category@2, ss_ext_sales_price@1] +10)------------------CoalescePartitionsExec +11)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@2, ss_ext_sales_price@4, i_category@1] +12)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_category], file_type=vortex +13)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex, predicate: ss_store_sk@7 IS NULL +14)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +15)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex +16)--------------ProjectionExec: expr=[web as channel, ws_ship_customer_sk as col_name, d_year@0 as d_year, d_qoy@1 as d_qoy, i_category@2 as i_category, ws_ext_sales_price@3 as ext_sales_price] +17)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[d_year@4, d_qoy@5, i_category@2, ws_ext_sales_price@1] +18)------------------CoalescePartitionsExec +19)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@2, ws_ext_sales_price@4, i_category@1] +20)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_category], file_type=vortex +21)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price], file_type=vortex, predicate: ws_ship_customer_sk@8 IS NULL +22)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +23)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex +24)--------------ProjectionExec: expr=[catalog as channel, cs_ship_addr_sk as col_name, d_year@0 as d_year, d_qoy@1 as d_qoy, i_category@2 as i_category, cs_ext_sales_price@3 as ext_sales_price] +25)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[d_year@4, d_qoy@5, i_category@2, cs_ext_sales_price@1] +26)------------------CoalescePartitionsExec +27)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@1)], projection=[cs_sold_date_sk@2, cs_ext_sales_price@4, i_category@1] +28)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_category], file_type=vortex +29)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price], file_type=vortex, predicate: cs_ship_addr_sk@10 IS NULL +30)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +31)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no new file mode 100644 index 00000000000..1f1c8dde519 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no @@ -0,0 +1,252 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ss AS + (SELECT s_store_sk, + sum(ss_ext_sales_price) AS sales, + sum(ss_net_profit) AS profit + FROM store_sales, + date_dim, + store + WHERE ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ss_store_sk = s_store_sk + GROUP BY s_store_sk) , + sr AS + (SELECT s_store_sk, + sum(sr_return_amt) AS returns_, + sum(sr_net_loss) AS profit_loss + FROM store_returns, + date_dim, + store + WHERE sr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND sr_store_sk = s_store_sk + GROUP BY s_store_sk), + cs AS + (SELECT cs_call_center_sk, + sum(cs_ext_sales_price) AS sales, + sum(cs_net_profit) AS profit + FROM catalog_sales, + date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + GROUP BY cs_call_center_sk), + cr AS + (SELECT cr_call_center_sk, + sum(cr_return_amount) AS returns_, + sum(cr_net_loss) AS profit_loss + FROM catalog_returns, + date_dim + WHERE cr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + GROUP BY cr_call_center_sk ), + ws AS + (SELECT wp_web_page_sk, + sum(ws_ext_sales_price) AS sales, + sum(ws_net_profit) AS profit + FROM web_sales, + date_dim, + web_page + WHERE ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ws_web_page_sk = wp_web_page_sk + GROUP BY wp_web_page_sk), + wr AS + (SELECT wp_web_page_sk, + sum(wr_return_amt) AS returns_, + sum(wr_net_loss) AS profit_loss + FROM web_returns, + date_dim, + web_page + WHERE wr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND wr_web_page_sk = wp_web_page_sk + GROUP BY wp_web_page_sk) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + ss.s_store_sk AS id , + sales , + coalesce(returns_, 0) AS returns_ , + (profit - coalesce(profit_loss,0)) AS profit + FROM ss + LEFT JOIN sr ON ss.s_store_sk = sr.s_store_sk + UNION ALL SELECT 'catalog channel' AS channel , + cs_call_center_sk AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM cs , + cr + UNION ALL SELECT 'web channel' AS channel , + ws.wp_web_page_sk AS id , + sales , + coalesce(returns_, 0) returns_ , + (profit - coalesce(profit_loss,0)) AS profit + FROM ws + LEFT JOIN wr ON ws.wp_web_page_sk = wr.wp_web_page_sk ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST, + returns_ DESC +LIMIT 100; +---- +logical_plan +01)Sort: x.channel ASC NULLS FIRST, x.id ASC NULLS FIRST, returns_ DESC NULLS FIRST, fetch=100 +02)--Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns_) AS returns_, sum(x.profit) AS profit +03)----Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns_), sum(x.profit)]] +04)------SubqueryAlias: x +05)--------Union +06)----------Projection: Utf8("store channel") AS channel, ss.s_store_sk AS id, ss.sales, CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE Decimal128(0.00,22,2) END AS returns_, ss.profit - CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE Decimal128(0.00,22,2) END AS profit +07)------------Projection: CAST(sr.returns_ AS Decimal128(22, 2)) AS __common_expr_1, CAST(sr.profit_loss AS Decimal128(22, 2)) AS __common_expr_2, ss.s_store_sk, ss.sales, ss.profit +08)--------------Left Join: ss.s_store_sk = sr.s_store_sk +09)----------------SubqueryAlias: ss +10)------------------Projection: store.s_store_sk, sum(store_sales.ss_ext_sales_price) AS sales, sum(store_sales.ss_net_profit) AS profit +11)--------------------Aggregate: groupBy=[[store.s_store_sk]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_net_profit)]] +12)----------------------Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store.s_store_sk +13)------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +14)--------------------------Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit +15)----------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +20)--------------------------TableScan: store projection=[s_store_sk] +21)----------------SubqueryAlias: sr +22)------------------Projection: store.s_store_sk, sum(store_returns.sr_return_amt) AS returns_, sum(store_returns.sr_net_loss) AS profit_loss +23)--------------------Aggregate: groupBy=[[store.s_store_sk]], aggr=[[sum(store_returns.sr_return_amt), sum(store_returns.sr_net_loss)]] +24)----------------------Projection: store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_sk +25)------------------------Inner Join: store_returns.sr_store_sk = store.s_store_sk +26)--------------------------Projection: store_returns.sr_store_sk, store_returns.sr_return_amt, store_returns.sr_net_loss +27)----------------------------Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk +28)------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] +29)------------------------------Projection: date_dim.d_date_sk +30)--------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +31)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +32)--------------------------TableScan: store projection=[s_store_sk] +33)----------Projection: Utf8("catalog channel") AS channel, cs.cs_call_center_sk AS id, cs.sales, CAST(cr.returns_ AS Decimal128(22, 2)) AS returns_, CAST(cs.profit - cr.profit_loss AS Decimal128(23, 2)) AS profit +34)------------Cross Join: +35)--------------SubqueryAlias: cs +36)----------------Projection: catalog_sales.cs_call_center_sk, sum(catalog_sales.cs_ext_sales_price) AS sales, sum(catalog_sales.cs_net_profit) AS profit +37)------------------Aggregate: groupBy=[[catalog_sales.cs_call_center_sk]], aggr=[[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)]] +38)--------------------Projection: catalog_sales.cs_call_center_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit +39)----------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +40)------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_ext_sales_price, cs_net_profit] +41)------------------------Projection: date_dim.d_date_sk +42)--------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +43)----------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +44)--------------SubqueryAlias: cr +45)----------------Projection: sum(catalog_returns.cr_return_amount) AS returns_, sum(catalog_returns.cr_net_loss) AS profit_loss +46)------------------Aggregate: groupBy=[[catalog_returns.cr_call_center_sk]], aggr=[[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)]] +47)--------------------Projection: catalog_returns.cr_call_center_sk, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss +48)----------------------Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk +49)------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_call_center_sk, cr_return_amount, cr_net_loss] +50)------------------------Projection: date_dim.d_date_sk +51)--------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +52)----------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +53)----------Projection: Utf8("web channel") AS channel, ws.wp_web_page_sk AS id, ws.sales, CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE Decimal128(0.00,22,2) END AS returns_, ws.profit - CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE Decimal128(0.00,22,2) END AS profit +54)------------Projection: CAST(wr.returns_ AS Decimal128(22, 2)) AS __common_expr_3, CAST(wr.profit_loss AS Decimal128(22, 2)) AS __common_expr_4, ws.wp_web_page_sk, ws.sales, ws.profit +55)--------------Left Join: ws.wp_web_page_sk = wr.wp_web_page_sk +56)----------------SubqueryAlias: ws +57)------------------Projection: web_page.wp_web_page_sk, sum(web_sales.ws_ext_sales_price) AS sales, sum(web_sales.ws_net_profit) AS profit +58)--------------------Aggregate: groupBy=[[web_page.wp_web_page_sk]], aggr=[[sum(web_sales.ws_ext_sales_price), sum(web_sales.ws_net_profit)]] +59)----------------------Projection: web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_page.wp_web_page_sk +60)------------------------Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk +61)--------------------------Projection: web_sales.ws_web_page_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit +62)----------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +63)------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_web_page_sk, ws_ext_sales_price, ws_net_profit] +64)------------------------------Projection: date_dim.d_date_sk +65)--------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +66)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +67)--------------------------TableScan: web_page projection=[wp_web_page_sk] +68)----------------SubqueryAlias: wr +69)------------------Projection: web_page.wp_web_page_sk, sum(web_returns.wr_return_amt) AS returns_, sum(web_returns.wr_net_loss) AS profit_loss +70)--------------------Aggregate: groupBy=[[web_page.wp_web_page_sk]], aggr=[[sum(web_returns.wr_return_amt), sum(web_returns.wr_net_loss)]] +71)----------------------Projection: web_returns.wr_return_amt, web_returns.wr_net_loss, web_page.wp_web_page_sk +72)------------------------Inner Join: web_returns.wr_web_page_sk = web_page.wp_web_page_sk +73)--------------------------Projection: web_returns.wr_web_page_sk, web_returns.wr_return_amt, web_returns.wr_net_loss +74)----------------------------Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk +75)------------------------------TableScan: web_returns projection=[wr_returned_date_sk, wr_web_page_sk, wr_return_amt, wr_net_loss] +76)------------------------------Projection: date_dim.d_date_sk +77)--------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +78)----------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +79)--------------------------TableScan: web_page projection=[wp_web_page_sk] +physical_plan +01)SortPreservingMergeExec: [channel@0 ASC, id@1 ASC, returns_@3 DESC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[channel@0 ASC, id@1 ASC, returns_@3 DESC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns_)@4 as returns_, sum(x.profit)@5 as profit] +04)------AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +05)--------RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +07)------------InterleaveExec +08)--------------ProjectionExec: expr=[store channel as channel, s_store_sk@2 as id, sales@3 as sales, CAST(CASE WHEN __common_expr_1@0 IS NOT NULL THEN __common_expr_1@0 ELSE 0.00 END AS Decimal128(22, 2)) as returns_, profit@4 - CASE WHEN __common_expr_2@1 IS NOT NULL THEN __common_expr_2@1 ELSE 0.00 END as profit] +09)----------------ProjectionExec: expr=[CAST(returns_@0 AS Decimal128(22, 2)) as __common_expr_1, CAST(profit_loss@1 AS Decimal128(22, 2)) as __common_expr_2, s_store_sk@2 as s_store_sk, sales@3 as sales, profit@4 as profit] +10)------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(s_store_sk@0, s_store_sk@0)], projection=[returns_@1, profit_loss@2, s_store_sk@3, sales@4, profit@5] +11)--------------------CoalescePartitionsExec +12)----------------------ProjectionExec: expr=[s_store_sk@0 as s_store_sk, sum(store_returns.sr_return_amt)@1 as returns_, sum(store_returns.sr_net_loss)@2 as profit_loss] +13)------------------------AggregateExec: mode=FinalPartitioned, gby=[s_store_sk@0 as s_store_sk], aggr=[sum(store_returns.sr_return_amt), sum(store_returns.sr_net_loss)] +14)--------------------------RepartitionExec: partitioning=Hash([s_store_sk@0], 4), input_partitions=4 +15)----------------------------AggregateExec: mode=Partial, gby=[s_store_sk@2 as s_store_sk], aggr=[sum(store_returns.sr_return_amt), sum(store_returns.sr_net_loss)] +16)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, sr_store_sk@0)], projection=[sr_return_amt@2, sr_net_loss@3, s_store_sk@0] +17)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +18)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, sr_returned_date_sk@0)], projection=[sr_store_sk@2, sr_return_amt@3, sr_net_loss@4] +19)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +20)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss], file_type=vortex +21)--------------------ProjectionExec: expr=[s_store_sk@0 as s_store_sk, sum(store_sales.ss_ext_sales_price)@1 as sales, sum(store_sales.ss_net_profit)@2 as profit] +22)----------------------AggregateExec: mode=FinalPartitioned, gby=[s_store_sk@0 as s_store_sk], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_net_profit)] +23)------------------------RepartitionExec: partitioning=Hash([s_store_sk@0], 4), input_partitions=4 +24)--------------------------AggregateExec: mode=Partial, gby=[s_store_sk@2 as s_store_sk], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_net_profit)] +25)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_ext_sales_price@2, ss_net_profit@3, s_store_sk@0] +26)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex +27)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_store_sk@2, ss_ext_sales_price@3, ss_net_profit@4] +28)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +29)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit], file_type=vortex +30)--------------ProjectionExec: expr=[catalog channel as channel, cs_call_center_sk@2 as id, sales@3 as sales, CAST(returns_@0 AS Decimal128(22, 2)) as returns_, CAST(profit@4 - profit_loss@1 AS Decimal128(23, 2)) as profit] +31)----------------CrossJoinExec +32)------------------CoalescePartitionsExec +33)--------------------ProjectionExec: expr=[sum(catalog_returns.cr_return_amount)@1 as returns_, sum(catalog_returns.cr_net_loss)@2 as profit_loss] +34)----------------------AggregateExec: mode=FinalPartitioned, gby=[cr_call_center_sk@0 as cr_call_center_sk], aggr=[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)] +35)------------------------RepartitionExec: partitioning=Hash([cr_call_center_sk@0], 4), input_partitions=4 +36)--------------------------AggregateExec: mode=Partial, gby=[cr_call_center_sk@0 as cr_call_center_sk], aggr=[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)] +37)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cr_returned_date_sk@0)], projection=[cr_call_center_sk@2, cr_return_amount@3, cr_net_loss@4] +38)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +39)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +40)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_returned_date_sk, cr_call_center_sk, cr_return_amount, cr_net_loss], file_type=vortex +41)------------------ProjectionExec: expr=[cs_call_center_sk@0 as cs_call_center_sk, sum(catalog_sales.cs_ext_sales_price)@1 as sales, sum(catalog_sales.cs_net_profit)@2 as profit] +42)--------------------AggregateExec: mode=FinalPartitioned, gby=[cs_call_center_sk@0 as cs_call_center_sk], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)] +43)----------------------RepartitionExec: partitioning=Hash([cs_call_center_sk@0], 4), input_partitions=4 +44)------------------------AggregateExec: mode=Partial, gby=[cs_call_center_sk@0 as cs_call_center_sk], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)] +45)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_call_center_sk@2, cs_ext_sales_price@3, cs_net_profit@4] +46)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +47)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_ext_sales_price, cs_net_profit], file_type=vortex +48)--------------ProjectionExec: expr=[web channel as channel, wp_web_page_sk@2 as id, sales@3 as sales, CAST(CASE WHEN __common_expr_3@0 IS NOT NULL THEN __common_expr_3@0 ELSE 0.00 END AS Decimal128(22, 2)) as returns_, profit@4 - CASE WHEN __common_expr_4@1 IS NOT NULL THEN __common_expr_4@1 ELSE 0.00 END as profit] +49)----------------ProjectionExec: expr=[CAST(returns_@0 AS Decimal128(22, 2)) as __common_expr_3, CAST(profit_loss@1 AS Decimal128(22, 2)) as __common_expr_4, wp_web_page_sk@2 as wp_web_page_sk, sales@3 as sales, profit@4 as profit] +50)------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(wp_web_page_sk@0, wp_web_page_sk@0)], projection=[returns_@1, profit_loss@2, wp_web_page_sk@3, sales@4, profit@5] +51)--------------------CoalescePartitionsExec +52)----------------------ProjectionExec: expr=[wp_web_page_sk@0 as wp_web_page_sk, sum(web_returns.wr_return_amt)@1 as returns_, sum(web_returns.wr_net_loss)@2 as profit_loss] +53)------------------------AggregateExec: mode=FinalPartitioned, gby=[wp_web_page_sk@0 as wp_web_page_sk], aggr=[sum(web_returns.wr_return_amt), sum(web_returns.wr_net_loss)] +54)--------------------------RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 4), input_partitions=4 +55)----------------------------AggregateExec: mode=Partial, gby=[wp_web_page_sk@2 as wp_web_page_sk], aggr=[sum(web_returns.wr_return_amt), sum(web_returns.wr_net_loss)] +56)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wp_web_page_sk@0, wr_web_page_sk@0)], projection=[wr_return_amt@2, wr_net_loss@3, wp_web_page_sk@0] +57)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_page.vortex]]}, projection=[wp_web_page_sk], file_type=vortex +58)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +59)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, wr_returned_date_sk@0)], projection=[wr_web_page_sk@2, wr_return_amt@3, wr_net_loss@4] +60)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +61)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_returned_date_sk, wr_web_page_sk, wr_return_amt, wr_net_loss], file_type=vortex +62)--------------------ProjectionExec: expr=[wp_web_page_sk@0 as wp_web_page_sk, sum(web_sales.ws_ext_sales_price)@1 as sales, sum(web_sales.ws_net_profit)@2 as profit] +63)----------------------AggregateExec: mode=FinalPartitioned, gby=[wp_web_page_sk@0 as wp_web_page_sk], aggr=[sum(web_sales.ws_ext_sales_price), sum(web_sales.ws_net_profit)] +64)------------------------RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 4), input_partitions=4 +65)--------------------------AggregateExec: mode=Partial, gby=[wp_web_page_sk@2 as wp_web_page_sk], aggr=[sum(web_sales.ws_ext_sales_price), sum(web_sales.ws_net_profit)] +66)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wp_web_page_sk@0, ws_web_page_sk@0)], projection=[ws_ext_sales_price@2, ws_net_profit@3, wp_web_page_sk@0] +67)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_page.vortex]]}, projection=[wp_web_page_sk], file_type=vortex +68)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_web_page_sk@2, ws_ext_sales_price@3, ws_net_profit@4] +69)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +70)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_web_page_sk, ws_ext_sales_price, ws_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no new file mode 100644 index 00000000000..be368b84eb9 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no @@ -0,0 +1,171 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ws AS + (SELECT d_year AS ws_sold_year, + ws_item_sk, + ws_bill_customer_sk ws_customer_sk, + sum(ws_quantity) ws_qty, + sum(ws_wholesale_cost) ws_wc, + sum(ws_sales_price) ws_sp + FROM web_sales + LEFT JOIN web_returns ON wr_order_number=ws_order_number + AND ws_item_sk=wr_item_sk + JOIN date_dim ON ws_sold_date_sk = d_date_sk + WHERE wr_order_number IS NULL + GROUP BY d_year, + ws_item_sk, + ws_bill_customer_sk ), + cs AS + (SELECT d_year AS cs_sold_year, + cs_item_sk, + cs_bill_customer_sk cs_customer_sk, + sum(cs_quantity) cs_qty, + sum(cs_wholesale_cost) cs_wc, + sum(cs_sales_price) cs_sp + FROM catalog_sales + LEFT JOIN catalog_returns ON cr_order_number=cs_order_number + AND cs_item_sk=cr_item_sk + JOIN date_dim ON cs_sold_date_sk = d_date_sk + WHERE cr_order_number IS NULL + GROUP BY d_year, + cs_item_sk, + cs_bill_customer_sk ), + ss AS + (SELECT d_year AS ss_sold_year, + ss_item_sk, + ss_customer_sk, + sum(ss_quantity) ss_qty, + sum(ss_wholesale_cost) ss_wc, + sum(ss_sales_price) ss_sp + FROM store_sales + LEFT JOIN store_returns ON sr_ticket_number=ss_ticket_number + AND ss_item_sk=sr_item_sk + JOIN date_dim ON ss_sold_date_sk = d_date_sk + WHERE sr_ticket_number IS NULL + GROUP BY d_year, + ss_item_sk, + ss_customer_sk ) +SELECT ss_sold_year, + ss_item_sk, + ss_customer_sk, + round((ss_qty*1.00)/(coalesce(ws_qty,0)+coalesce(cs_qty,0)),2) ratio, + ss_qty store_qty, + ss_wc store_wholesale_cost, + ss_sp store_sales_price, + coalesce(ws_qty,0)+coalesce(cs_qty,0) other_chan_qty, + coalesce(ws_wc,0)+coalesce(cs_wc,0) other_chan_wholesale_cost, + coalesce(ws_sp,0)+coalesce(cs_sp,0) other_chan_sales_price +FROM ss +LEFT JOIN ws ON (ws_sold_year=ss_sold_year + AND ws_item_sk=ss_item_sk + AND ws_customer_sk=ss_customer_sk) +LEFT JOIN cs ON (cs_sold_year=ss_sold_year + AND cs_item_sk=ss_item_sk + AND cs_customer_sk=ss_customer_sk) +WHERE (coalesce(ws_qty,0)>0 + OR coalesce(cs_qty, 0)>0) + AND ss_sold_year=2000 +ORDER BY ss_sold_year, + ss_item_sk, + ss_customer_sk, + ss_qty DESC, + ss_wc DESC, + ss_sp DESC, + other_chan_qty, + other_chan_wholesale_cost, + other_chan_sales_price, + ratio +LIMIT 100; +---- +logical_plan +01)Sort: ss.ss_sold_year ASC NULLS LAST, ss.ss_item_sk ASC NULLS LAST, ss.ss_customer_sk ASC NULLS LAST, other_chan_qty ASC NULLS LAST, other_chan_wholesale_cost ASC NULLS LAST, other_chan_sales_price ASC NULLS LAST, ratio ASC NULLS LAST, fetch=100 +02)--Projection: ss.ss_sold_year, ss.ss_item_sk, ss.ss_customer_sk, round(CAST(ss.ss_qty AS Float64) / CAST(__common_expr_1 AS Float64), Int32(2)) AS ratio, ss.ss_qty AS store_qty, ss.ss_wc AS store_wholesale_cost, ss.ss_sp AS store_sales_price, __common_expr_1 AS other_chan_qty, CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE Decimal128(0.00,22,2) END + CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE Decimal128(0.00,22,2) END AS other_chan_wholesale_cost, CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE Decimal128(0.00,22,2) END + CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE Decimal128(0.00,22,2) END AS other_chan_sales_price +03)----Projection: CASE WHEN ws.ws_qty IS NOT NULL THEN ws.ws_qty ELSE Int64(0) END + CASE WHEN cs.cs_qty IS NOT NULL THEN cs.cs_qty ELSE Int64(0) END AS __common_expr_1, CAST(ws.ws_wc AS Decimal128(22, 2)) AS __common_expr_2, CAST(cs.cs_wc AS Decimal128(22, 2)) AS __common_expr_3, CAST(ws.ws_sp AS Decimal128(22, 2)) AS __common_expr_4, CAST(cs.cs_sp AS Decimal128(22, 2)) AS __common_expr_5, ss.ss_sold_year, ss.ss_item_sk, ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp +04)------Filter: CASE WHEN ws.ws_qty IS NOT NULL THEN ws.ws_qty ELSE Int64(0) END > Int64(0) OR CASE WHEN cs.cs_qty IS NOT NULL THEN cs.cs_qty ELSE Int64(0) END > Int64(0) +05)--------Projection: ss.ss_sold_year, ss.ss_item_sk, ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp, ws.ws_qty, ws.ws_wc, ws.ws_sp, cs.cs_qty, cs.cs_wc, cs.cs_sp +06)----------Left Join: ss.ss_sold_year = cs.cs_sold_year, ss.ss_item_sk = cs.cs_item_sk, ss.ss_customer_sk = cs.cs_customer_sk +07)------------Projection: ss.ss_sold_year, ss.ss_item_sk, ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp, ws.ws_qty, ws.ws_wc, ws.ws_sp +08)--------------Left Join: ss.ss_sold_year = ws.ws_sold_year, ss.ss_item_sk = ws.ws_item_sk, ss.ss_customer_sk = ws.ws_customer_sk +09)----------------SubqueryAlias: ss +10)------------------Projection: date_dim.d_year AS ss_sold_year, store_sales.ss_item_sk, store_sales.ss_customer_sk, sum(store_sales.ss_quantity) AS ss_qty, sum(store_sales.ss_wholesale_cost) AS ss_wc, sum(store_sales.ss_sales_price) AS ss_sp +11)--------------------Aggregate: groupBy=[[date_dim.d_year, store_sales.ss_item_sk, store_sales.ss_customer_sk]], aggr=[[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)]] +12)----------------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price, date_dim.d_year +13)------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +14)--------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price +15)----------------------------Filter: store_returns.sr_ticket_number IS NULL +16)------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price, store_returns.sr_ticket_number +17)--------------------------------Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk +18)----------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_sales_price] +19)----------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] +20)--------------------------Filter: date_dim.d_year = Int64(2000) +21)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +22)----------------SubqueryAlias: ws +23)------------------Projection: date_dim.d_year AS ws_sold_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk AS ws_customer_sk, sum(web_sales.ws_quantity) AS ws_qty, sum(web_sales.ws_wholesale_cost) AS ws_wc, sum(web_sales.ws_sales_price) AS ws_sp +24)--------------------Aggregate: groupBy=[[date_dim.d_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk]], aggr=[[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)]] +25)----------------------Projection: web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price, date_dim.d_year +26)------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +27)--------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price +28)----------------------------Filter: web_returns.wr_order_number IS NULL +29)------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price, web_returns.wr_order_number +30)--------------------------------Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk +31)----------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_order_number, ws_quantity, ws_wholesale_cost, ws_sales_price] +32)----------------------------------TableScan: web_returns projection=[wr_item_sk, wr_order_number] +33)--------------------------Filter: date_dim.d_year = Int64(2000) +34)----------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +35)------------SubqueryAlias: cs +36)--------------Projection: date_dim.d_year AS cs_sold_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk AS cs_customer_sk, sum(catalog_sales.cs_quantity) AS cs_qty, sum(catalog_sales.cs_wholesale_cost) AS cs_wc, sum(catalog_sales.cs_sales_price) AS cs_sp +37)----------------Aggregate: groupBy=[[date_dim.d_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk]], aggr=[[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)]] +38)------------------Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price, date_dim.d_year +39)--------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +40)----------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price +41)------------------------Filter: catalog_returns.cr_order_number IS NULL +42)--------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price, catalog_returns.cr_order_number +43)----------------------------Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk +44)------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_sales_price] +45)------------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] +46)----------------------Filter: date_dim.d_year = Int64(2000) +47)------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +physical_plan +01)SortPreservingMergeExec: [ss_sold_year@0 ASC NULLS LAST, ss_item_sk@1 ASC NULLS LAST, ss_customer_sk@2 ASC NULLS LAST, other_chan_qty@7 ASC NULLS LAST, other_chan_wholesale_cost@8 ASC NULLS LAST, other_chan_sales_price@9 ASC NULLS LAST, ratio@3 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[ss_item_sk@1 ASC NULLS LAST, ss_customer_sk@2 ASC NULLS LAST, other_chan_qty@7 ASC NULLS LAST, other_chan_wholesale_cost@8 ASC NULLS LAST, other_chan_sales_price@9 ASC NULLS LAST, ratio@3 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[ss_sold_year@5 as ss_sold_year, ss_item_sk@6 as ss_item_sk, ss_customer_sk@7 as ss_customer_sk, round(CAST(ss_qty@8 AS Float64) / CAST(__common_expr_1@0 AS Float64), 2) as ratio, ss_qty@8 as store_qty, ss_wc@9 as store_wholesale_cost, ss_sp@10 as store_sales_price, __common_expr_1@0 as other_chan_qty, CASE WHEN __common_expr_2@1 IS NOT NULL THEN __common_expr_2@1 ELSE 0.00 END + CASE WHEN __common_expr_3@2 IS NOT NULL THEN __common_expr_3@2 ELSE 0.00 END as other_chan_wholesale_cost, CASE WHEN __common_expr_4@3 IS NOT NULL THEN __common_expr_4@3 ELSE 0.00 END + CASE WHEN __common_expr_5@4 IS NOT NULL THEN __common_expr_5@4 ELSE 0.00 END as other_chan_sales_price] +04)------ProjectionExec: expr=[CASE WHEN ws_qty@6 IS NOT NULL THEN ws_qty@6 ELSE 0 END + CASE WHEN cs_qty@9 IS NOT NULL THEN cs_qty@9 ELSE 0 END as __common_expr_1, CAST(ws_wc@7 AS Decimal128(22, 2)) as __common_expr_2, CAST(cs_wc@10 AS Decimal128(22, 2)) as __common_expr_3, CAST(ws_sp@8 AS Decimal128(22, 2)) as __common_expr_4, CAST(cs_sp@11 AS Decimal128(22, 2)) as __common_expr_5, ss_sold_year@0 as ss_sold_year, ss_item_sk@1 as ss_item_sk, ss_customer_sk@2 as ss_customer_sk, ss_qty@3 as ss_qty, ss_wc@4 as ss_wc, ss_sp@5 as ss_sp] +05)--------FilterExec: CASE WHEN ws_qty@6 IS NOT NULL THEN ws_qty@6 ELSE 0 END > 0 OR CASE WHEN cs_qty@9 IS NOT NULL THEN cs_qty@9 ELSE 0 END > 0 +06)----------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(cs_sold_year@0, ss_sold_year@0), (cs_item_sk@1, ss_item_sk@1), (cs_customer_sk@2, ss_customer_sk@2)], projection=[ss_sold_year@6, ss_item_sk@7, ss_customer_sk@8, ss_qty@9, ss_wc@10, ss_sp@11, ws_qty@12, ws_wc@13, ws_sp@14, cs_qty@3, cs_wc@4, cs_sp@5] +07)------------CoalescePartitionsExec +08)--------------ProjectionExec: expr=[d_year@0 as cs_sold_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@2 as cs_customer_sk, sum(catalog_sales.cs_quantity)@3 as cs_qty, sum(catalog_sales.cs_wholesale_cost)@4 as cs_wc, sum(catalog_sales.cs_sales_price)@5 as cs_sp] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@2 as cs_bill_customer_sk], aggr=[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)], ordering_mode=PartiallySorted([0]) +10)------------------RepartitionExec: partitioning=Hash([d_year@0, cs_item_sk@1, cs_bill_customer_sk@2], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[d_year@5 as d_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@0 as cs_bill_customer_sk], aggr=[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)], ordering_mode=PartiallySorted([0]) +12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_customer_sk@3, cs_item_sk@4, cs_quantity@5, cs_wholesale_cost@6, cs_sales_price@7, d_year@1] +13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2000 +14)------------------------FilterExec: cr_order_number@6 IS NULL, projection=[cs_sold_date_sk@0, cs_bill_customer_sk@1, cs_item_sk@2, cs_quantity@3, cs_wholesale_cost@4, cs_sales_price@5] +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(cr_order_number@1, cs_order_number@3), (cr_item_sk@0, cs_item_sk@2)], projection=[cs_sold_date_sk@2, cs_bill_customer_sk@3, cs_item_sk@4, cs_quantity@6, cs_wholesale_cost@7, cs_sales_price@8, cr_order_number@1] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number], file_type=vortex +17)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_sales_price], file_type=vortex +18)------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(ws_sold_year@0, ss_sold_year@0), (ws_item_sk@1, ss_item_sk@1), (ws_customer_sk@2, ss_customer_sk@2)], projection=[ss_sold_year@6, ss_item_sk@7, ss_customer_sk@8, ss_qty@9, ss_wc@10, ss_sp@11, ws_qty@3, ws_wc@4, ws_sp@5] +19)--------------CoalescePartitionsExec +20)----------------ProjectionExec: expr=[d_year@0 as ws_sold_year, ws_item_sk@1 as ws_item_sk, ws_bill_customer_sk@2 as ws_customer_sk, sum(web_sales.ws_quantity)@3 as ws_qty, sum(web_sales.ws_wholesale_cost)@4 as ws_wc, sum(web_sales.ws_sales_price)@5 as ws_sp] +21)------------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, ws_item_sk@1 as ws_item_sk, ws_bill_customer_sk@2 as ws_bill_customer_sk], aggr=[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)], ordering_mode=PartiallySorted([0]) +22)--------------------RepartitionExec: partitioning=Hash([d_year@0, ws_item_sk@1, ws_bill_customer_sk@2], 4), input_partitions=4 +23)----------------------AggregateExec: mode=Partial, gby=[d_year@5 as d_year, ws_item_sk@0 as ws_item_sk, ws_bill_customer_sk@1 as ws_bill_customer_sk], aggr=[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)], ordering_mode=PartiallySorted([0]) +24)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@3, ws_bill_customer_sk@4, ws_quantity@5, ws_wholesale_cost@6, ws_sales_price@7, d_year@1] +25)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2000 +26)--------------------------FilterExec: wr_order_number@6 IS NULL, projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_bill_customer_sk@2, ws_quantity@3, ws_wholesale_cost@4, ws_sales_price@5] +27)----------------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(wr_order_number@1, ws_order_number@3), (wr_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@2, ws_item_sk@3, ws_bill_customer_sk@4, ws_quantity@6, ws_wholesale_cost@7, ws_sales_price@8, wr_order_number@1] +28)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_order_number], file_type=vortex +29)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_order_number, ws_quantity, ws_wholesale_cost, ws_sales_price], file_type=vortex +30)--------------ProjectionExec: expr=[d_year@0 as ss_sold_year, ss_item_sk@1 as ss_item_sk, ss_customer_sk@2 as ss_customer_sk, sum(store_sales.ss_quantity)@3 as ss_qty, sum(store_sales.ss_wholesale_cost)@4 as ss_wc, sum(store_sales.ss_sales_price)@5 as ss_sp] +31)----------------AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, ss_item_sk@1 as ss_item_sk, ss_customer_sk@2 as ss_customer_sk], aggr=[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)], ordering_mode=PartiallySorted([0]) +32)------------------RepartitionExec: partitioning=Hash([d_year@0, ss_item_sk@1, ss_customer_sk@2], 4), input_partitions=4 +33)--------------------AggregateExec: mode=Partial, gby=[d_year@5 as d_year, ss_item_sk@0 as ss_item_sk, ss_customer_sk@1 as ss_customer_sk], aggr=[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)], ordering_mode=PartiallySorted([0]) +34)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@3, ss_customer_sk@4, ss_quantity@5, ss_wholesale_cost@6, ss_sales_price@7, d_year@1] +35)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, predicate: d_year@6 = 2000 +36)------------------------FilterExec: sr_ticket_number@6 IS NULL, projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_quantity@3, ss_wholesale_cost@4, ss_sales_price@5] +37)--------------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(sr_ticket_number@1, ss_ticket_number@3), (sr_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@2, ss_item_sk@3, ss_customer_sk@4, ss_quantity@6, ss_wholesale_cost@7, ss_sales_price@8, sr_ticket_number@1] +38)----------------------------CoalescePartitionsExec +39)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number], file_type=vortex +40)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q79.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q79.slt.no new file mode 100644 index 00000000000..1bdd8da29b9 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q79.slt.no @@ -0,0 +1,85 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_last_name, + c_first_name, + SUBSTRING(s_city,1,30), + ss_ticket_number, + amt, + profit +FROM + (SELECT ss_ticket_number , + ss_customer_sk , + store.s_city , + sum(ss_coupon_amt) amt , + sum(ss_net_profit) profit + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND (household_demographics.hd_dep_count = 6 + OR household_demographics.hd_vehicle_count > 2) + AND date_dim.d_dow = 1 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_number_employees BETWEEN 200 AND 295 + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + store.s_city) ms, + customer +WHERE ss_customer_sk = c_customer_sk +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + SUBSTRING(s_city,1,30) NULLS FIRST, + profit NULLS FIRST, + ss_ticket_number +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_last_name ASC NULLS FIRST, customer.c_first_name ASC NULLS FIRST, substr(ms.s_city,Int64(1),Int64(30)) ASC NULLS FIRST, ms.profit ASC NULLS FIRST, ms.ss_ticket_number ASC NULLS LAST, fetch=100 +02)--Projection: customer.c_last_name, customer.c_first_name, substr(ms.s_city, Int64(1), Int64(30)), ms.ss_ticket_number, ms.amt, ms.profit +03)----Inner Join: ms.ss_customer_sk = customer.c_customer_sk +04)------SubqueryAlias: ms +05)--------Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, store.s_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit +06)----------Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, store.s_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] +07)------------Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, store.s_city +08)--------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +09)----------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, store.s_city +10)------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +11)--------------------Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit +12)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +13)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] +14)------------------------Projection: date_dim.d_date_sk +15)--------------------------Filter: date_dim.d_dow = Int64(1) AND (date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)) +16)----------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_dow], partial_filters=[date_dim.d_dow = Int64(1), date_dim.d_year = Int64(1999) OR date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2001)] +17)--------------------Projection: store.s_store_sk, store.s_city +18)----------------------Filter: store.s_number_employees >= Int64(200) AND store.s_number_employees <= Int64(295) +19)------------------------TableScan: store projection=[s_store_sk, s_number_employees, s_city], partial_filters=[store.s_number_employees >= Int64(200), store.s_number_employees <= Int64(295)] +20)----------------Projection: household_demographics.hd_demo_sk +21)------------------Filter: household_demographics.hd_dep_count = Int64(6) OR household_demographics.hd_vehicle_count > Int32(2) +22)--------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(6) OR household_demographics.hd_vehicle_count > Int32(2)] +23)------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +physical_plan +01)SortPreservingMergeExec: [c_last_name@0 ASC, c_first_name@1 ASC, substr(ms.s_city,Int64(1),Int64(30))@2 ASC, profit@5 ASC, ss_ticket_number@3 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC, c_first_name@1 ASC, substr(ms.s_city,Int64(1),Int64(30))@2 ASC, profit@5 ASC, ss_ticket_number@3 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, substr(s_city@2, 1, 30) as substr(ms.s_city,Int64(1),Int64(30)), ss_ticket_number@3 as ss_ticket_number, amt@4 as amt, profit@5 as profit] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_last_name@2, c_first_name@1, s_city@5, ss_ticket_number@3, amt@6, profit@7] +05)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +06)--------ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, s_city@3 as s_city, sum(store_sales.ss_coupon_amt)@4 as amt, sum(store_sales.ss_net_profit)@5 as profit] +07)----------AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, s_city@3 as s_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] +08)------------RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, s_city@3], 4), input_partitions=4 +09)--------------AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, s_city@5 as s_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_customer_sk@1, ss_addr_sk@3, ss_ticket_number@4, ss_coupon_amt@5, ss_net_profit@6, s_city@7] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 6 OR hd_vehicle_count@4 > 2 +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_ticket_number@6, ss_coupon_amt@7, ss_net_profit@8, s_city@1] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_city], file_type=vortex, predicate: s_number_employees@6 >= 200 AND s_number_employees@6 <= 295 +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_store_sk@5, ss_ticket_number@6, ss_coupon_amt@7, ss_net_profit@8] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_dow@7 = 1 AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001) +16)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no new file mode 100644 index 00000000000..9f0a9b40781 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no @@ -0,0 +1,499 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT s_store_name, + sum(ss_net_profit) +FROM store_sales, + date_dim, + store, + (SELECT ca_zip + FROM + (SELECT SUBSTRING(ca_zip, 1, 5) ca_zip + FROM customer_address + WHERE SUBSTRING(ca_zip, 1, 5) IN ('24128', + '76232', + '65084', + '87816', + '83926', + '77556', + '20548', + '26231', + '43848', + '15126', + '91137', + '61265', + '98294', + '25782', + '17920', + '18426', + '98235', + '40081', + '84093', + '28577', + '55565', + '17183', + '54601', + '67897', + '22752', + '86284', + '18376', + '38607', + '45200', + '21756', + '29741', + '96765', + '23932', + '89360', + '29839', + '25989', + '28898', + '91068', + '72550', + '10390', + '18845', + '47770', + '82636', + '41367', + '76638', + '86198', + '81312', + '37126', + '39192', + '88424', + '72175', + '81426', + '53672', + '10445', + '42666', + '66864', + '66708', + '41248', + '48583', + '82276', + '18842', + '78890', + '49448', + '14089', + '38122', + '34425', + '79077', + '19849', + '43285', + '39861', + '66162', + '77610', + '13695', + '99543', + '83444', + '83041', + '12305', + '57665', + '68341', + '25003', + '57834', + '62878', + '49130', + '81096', + '18840', + '27700', + '23470', + '50412', + '21195', + '16021', + '76107', + '71954', + '68309', + '18119', + '98359', + '64544', + '10336', + '86379', + '27068', + '39736', + '98569', + '28915', + '24206', + '56529', + '57647', + '54917', + '42961', + '91110', + '63981', + '14922', + '36420', + '23006', + '67467', + '32754', + '30903', + '20260', + '31671', + '51798', + '72325', + '85816', + '68621', + '13955', + '36446', + '41766', + '68806', + '16725', + '15146', + '22744', + '35850', + '88086', + '51649', + '18270', + '52867', + '39972', + '96976', + '63792', + '11376', + '94898', + '13595', + '10516', + '90225', + '58943', + '39371', + '94945', + '28587', + '96576', + '57855', + '28488', + '26105', + '83933', + '25858', + '34322', + '44438', + '73171', + '30122', + '34102', + '22685', + '71256', + '78451', + '54364', + '13354', + '45375', + '40558', + '56458', + '28286', + '45266', + '47305', + '69399', + '83921', + '26233', + '11101', + '15371', + '69913', + '35942', + '15882', + '25631', + '24610', + '44165', + '99076', + '33786', + '70738', + '26653', + '14328', + '72305', + '62496', + '22152', + '10144', + '64147', + '48425', + '14663', + '21076', + '18799', + '30450', + '63089', + '81019', + '68893', + '24996', + '51200', + '51211', + '45692', + '92712', + '70466', + '79994', + '22437', + '25280', + '38935', + '71791', + '73134', + '56571', + '14060', + '19505', + '72425', + '56575', + '74351', + '68786', + '51650', + '20004', + '18383', + '76614', + '11634', + '18906', + '15765', + '41368', + '73241', + '76698', + '78567', + '97189', + '28545', + '76231', + '75691', + '22246', + '51061', + '90578', + '56691', + '68014', + '51103', + '94167', + '57047', + '14867', + '73520', + '15734', + '63435', + '25733', + '35474', + '24676', + '94627', + '53535', + '17879', + '15559', + '53268', + '59166', + '11928', + '59402', + '33282', + '45721', + '43933', + '68101', + '33515', + '36634', + '71286', + '19736', + '58058', + '55253', + '67473', + '41918', + '19515', + '36495', + '19430', + '22351', + '77191', + '91393', + '49156', + '50298', + '87501', + '18652', + '53179', + '18767', + '63193', + '23968', + '65164', + '68880', + '21286', + '72823', + '58470', + '67301', + '13394', + '31016', + '70372', + '67030', + '40604', + '24317', + '45748', + '39127', + '26065', + '77721', + '31029', + '31880', + '60576', + '24671', + '45549', + '13376', + '50016', + '33123', + '19769', + '22927', + '97789', + '46081', + '72151', + '15723', + '46136', + '51949', + '68100', + '96888', + '64528', + '14171', + '79777', + '28709', + '11489', + '25103', + '32213', + '78668', + '22245', + '15798', + '27156', + '37930', + '62971', + '21337', + '51622', + '67853', + '10567', + '38415', + '15455', + '58263', + '42029', + '60279', + '37125', + '56240', + '88190', + '50308', + '26859', + '64457', + '89091', + '82136', + '62377', + '36233', + '63837', + '58078', + '17043', + '30010', + '60099', + '28810', + '98025', + '29178', + '87343', + '73273', + '30469', + '64034', + '39516', + '86057', + '21309', + '90257', + '67875', + '40162', + '11356', + '73650', + '61810', + '72013', + '30431', + '22461', + '19512', + '13375', + '55307', + '30625', + '83849', + '68908', + '26689', + '96451', + '38193', + '46820', + '88885', + '84935', + '69035', + '83144', + '47537', + '56616', + '94983', + '48033', + '69952', + '25486', + '61547', + '27385', + '61860', + '58048', + '56910', + '16807', + '17871', + '35258', + '31387', + '35458', + '35576') INTERSECT + SELECT ca_zip + FROM + (SELECT SUBSTRING(ca_zip, 1, 5) ca_zip, + count(*) cnt + FROM customer_address, + customer + WHERE ca_address_sk = c_current_addr_sk + AND c_preferred_cust_flag='Y' + GROUP BY ca_zip + HAVING count(*) > 10)A1)A2) V1 +WHERE ss_store_sk = s_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 1998 + AND (SUBSTRING(s_zip, 1, 2) = SUBSTRING(V1.ca_zip, 1, 2)) +GROUP BY s_store_name +ORDER BY s_store_name +LIMIT 100; +---- +logical_plan +01)Sort: store.s_store_name ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[store.s_store_name]], aggr=[[sum(store_sales.ss_net_profit)]] +03)----Projection: store_sales.ss_net_profit, store.s_store_name +04)------Inner Join: substr(store.s_zip, Int64(1), Int64(2)) = substr(v1.ca_zip, Int64(1), Int64(2)) +05)--------Projection: store_sales.ss_net_profit, store.s_store_name, store.s_zip +06)----------Inner Join: store_sales.ss_store_sk = store.s_store_sk +07)------------Projection: store_sales.ss_store_sk, store_sales.ss_net_profit +08)--------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +09)----------------TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] +10)----------------Projection: date_dim.d_date_sk +11)------------------Filter: date_dim.d_qoy = Int64(2) AND date_dim.d_year = Int64(1998) +12)--------------------TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], partial_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(1998)] +13)------------TableScan: store projection=[s_store_sk, s_store_name, s_zip] +14)--------SubqueryAlias: v1 +15)----------SubqueryAlias: a2 +16)------------LeftSemi Join: left.ca_zip = right.ca_zip +17)--------------Aggregate: groupBy=[[left.ca_zip]], aggr=[[]] +18)----------------SubqueryAlias: left +19)------------------Projection: substr(customer_address.ca_zip, Int64(1), Int64(5)) AS ca_zip +20)--------------------Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8View("24128"), Utf8View("76232"), Utf8View("65084"), Utf8View("87816"), Utf8View("83926"), Utf8View("77556"), Utf8View("20548"), Utf8View("26231"), Utf8View("43848"), Utf8View("15126"), Utf8View("91137"), Utf8View("61265"), Utf8View("98294"), Utf8View("25782"), Utf8View("17920"), Utf8View("18426"), Utf8View("98235"), Utf8View("40081"), Utf8View("84093"), Utf8View("28577"), Utf8View("55565"), Utf8View("17183"), Utf8View("54601"), Utf8View("67897"), Utf8View("22752"), Utf8View("86284"), Utf8View("18376"), Utf8View("38607"), Utf8View("45200"), Utf8View("21756"), Utf8View("29741"), Utf8View("96765"), Utf8View("23932"), Utf8View("89360"), Utf8View("29839"), Utf8View("25989"), Utf8View("28898"), Utf8View("91068"), Utf8View("72550"), Utf8View("10390"), Utf8View("18845"), Utf8View("47770"), Utf8View("82636"), Utf8View("41367"), Utf8View("76638"), Utf8View("86198"), Utf8View("81312"), Utf8View("37126"), Utf8View("39192"), Utf8View("88424"), Utf8View("72175"), Utf8View("81426"), Utf8View("53672"), Utf8View("10445"), Utf8View("42666"), Utf8View("66864"), Utf8View("66708"), Utf8View("41248"), Utf8View("48583"), Utf8View("82276"), Utf8View("18842"), Utf8View("78890"), Utf8View("49448"), Utf8View("14089"), Utf8View("38122"), Utf8View("34425"), Utf8View("79077"), Utf8View("19849"), Utf8View("43285"), Utf8View("39861"), Utf8View("66162"), Utf8View("77610"), Utf8View("13695"), Utf8View("99543"), Utf8View("83444"), Utf8View("83041"), Utf8View("12305"), Utf8View("57665"), Utf8View("68341"), Utf8View("25003"), Utf8View("57834"), Utf8View("62878"), Utf8View("49130"), Utf8View("81096"), Utf8View("18840"), Utf8View("27700"), Utf8View("23470"), Utf8View("50412"), Utf8View("21195"), Utf8View("16021"), Utf8View("76107"), Utf8View("71954"), Utf8View("68309"), Utf8View("18119"), Utf8View("98359"), Utf8View("64544"), Utf8View("10336"), Utf8View("86379"), Utf8View("27068"), Utf8View("39736"), Utf8View("98569"), Utf8View("28915"), Utf8View("24206"), Utf8View("56529"), Utf8View("57647"), Utf8View("54917"), Utf8View("42961"), Utf8View("91110"), Utf8View("63981"), Utf8View("14922"), Utf8View("36420"), Utf8View("23006"), Utf8View("67467"), Utf8View("32754"), Utf8View("30903"), Utf8View("20260"), Utf8View("31671"), Utf8View("51798"), Utf8View("72325"), Utf8View("85816"), Utf8View("68621"), Utf8View("13955"), Utf8View("36446"), Utf8View("41766"), Utf8View("68806"), Utf8View("16725"), Utf8View("15146"), Utf8View("22744"), Utf8View("35850"), Utf8View("88086"), Utf8View("51649"), Utf8View("18270"), Utf8View("52867"), Utf8View("39972"), Utf8View("96976"), Utf8View("63792"), Utf8View("11376"), Utf8View("94898"), Utf8View("13595"), Utf8View("10516"), Utf8View("90225"), Utf8View("58943"), Utf8View("39371"), Utf8View("94945"), Utf8View("28587"), Utf8View("96576"), Utf8View("57855"), Utf8View("28488"), Utf8View("26105"), Utf8View("83933"), Utf8View("25858"), Utf8View("34322"), Utf8View("44438"), Utf8View("73171"), Utf8View("30122"), Utf8View("34102"), Utf8View("22685"), Utf8View("71256"), Utf8View("78451"), Utf8View("54364"), Utf8View("13354"), Utf8View("45375"), Utf8View("40558"), Utf8View("56458"), Utf8View("28286"), Utf8View("45266"), Utf8View("47305"), Utf8View("69399"), Utf8View("83921"), Utf8View("26233"), Utf8View("11101"), Utf8View("15371"), Utf8View("69913"), Utf8View("35942"), Utf8View("15882"), Utf8View("25631"), Utf8View("24610"), Utf8View("44165"), Utf8View("99076"), Utf8View("33786"), Utf8View("70738"), Utf8View("26653"), Utf8View("14328"), Utf8View("72305"), Utf8View("62496"), Utf8View("22152"), Utf8View("10144"), Utf8View("64147"), Utf8View("48425"), Utf8View("14663"), Utf8View("21076"), Utf8View("18799"), Utf8View("30450"), Utf8View("63089"), Utf8View("81019"), Utf8View("68893"), Utf8View("24996"), Utf8View("51200"), Utf8View("51211"), Utf8View("45692"), Utf8View("92712"), Utf8View("70466"), Utf8View("79994"), Utf8View("22437"), Utf8View("25280"), Utf8View("38935"), Utf8View("71791"), Utf8View("73134"), Utf8View("56571"), Utf8View("14060"), Utf8View("19505"), Utf8View("72425"), Utf8View("56575"), Utf8View("74351"), Utf8View("68786"), Utf8View("51650"), Utf8View("20004"), Utf8View("18383"), Utf8View("76614"), Utf8View("11634"), Utf8View("18906"), Utf8View("15765"), Utf8View("41368"), Utf8View("73241"), Utf8View("76698"), Utf8View("78567"), Utf8View("97189"), Utf8View("28545"), Utf8View("76231"), Utf8View("75691"), Utf8View("22246"), Utf8View("51061"), Utf8View("90578"), Utf8View("56691"), Utf8View("68014"), Utf8View("51103"), Utf8View("94167"), Utf8View("57047"), Utf8View("14867"), Utf8View("73520"), Utf8View("15734"), Utf8View("63435"), Utf8View("25733"), Utf8View("35474"), Utf8View("24676"), Utf8View("94627"), Utf8View("53535"), Utf8View("17879"), Utf8View("15559"), Utf8View("53268"), Utf8View("59166"), Utf8View("11928"), Utf8View("59402"), Utf8View("33282"), Utf8View("45721"), Utf8View("43933"), Utf8View("68101"), Utf8View("33515"), Utf8View("36634"), Utf8View("71286"), Utf8View("19736"), Utf8View("58058"), Utf8View("55253"), Utf8View("67473"), Utf8View("41918"), Utf8View("19515"), Utf8View("36495"), Utf8View("19430"), Utf8View("22351"), Utf8View("77191"), Utf8View("91393"), Utf8View("49156"), Utf8View("50298"), Utf8View("87501"), Utf8View("18652"), Utf8View("53179"), Utf8View("18767"), Utf8View("63193"), Utf8View("23968"), Utf8View("65164"), Utf8View("68880"), Utf8View("21286"), Utf8View("72823"), Utf8View("58470"), Utf8View("67301"), Utf8View("13394"), Utf8View("31016"), Utf8View("70372"), Utf8View("67030"), Utf8View("40604"), Utf8View("24317"), Utf8View("45748"), Utf8View("39127"), Utf8View("26065"), Utf8View("77721"), Utf8View("31029"), Utf8View("31880"), Utf8View("60576"), Utf8View("24671"), Utf8View("45549"), Utf8View("13376"), Utf8View("50016"), Utf8View("33123"), Utf8View("19769"), Utf8View("22927"), Utf8View("97789"), Utf8View("46081"), Utf8View("72151"), Utf8View("15723"), Utf8View("46136"), Utf8View("51949"), Utf8View("68100"), Utf8View("96888"), Utf8View("64528"), Utf8View("14171"), Utf8View("79777"), Utf8View("28709"), Utf8View("11489"), Utf8View("25103"), Utf8View("32213"), Utf8View("78668"), Utf8View("22245"), Utf8View("15798"), Utf8View("27156"), Utf8View("37930"), Utf8View("62971"), Utf8View("21337"), Utf8View("51622"), Utf8View("67853"), Utf8View("10567"), Utf8View("38415"), Utf8View("15455"), Utf8View("58263"), Utf8View("42029"), Utf8View("60279"), Utf8View("37125"), Utf8View("56240"), Utf8View("88190"), Utf8View("50308"), Utf8View("26859"), Utf8View("64457"), Utf8View("89091"), Utf8View("82136"), Utf8View("62377"), Utf8View("36233"), Utf8View("63837"), Utf8View("58078"), Utf8View("17043"), Utf8View("30010"), Utf8View("60099"), Utf8View("28810"), Utf8View("98025"), Utf8View("29178"), Utf8View("87343"), Utf8View("73273"), Utf8View("30469"), Utf8View("64034"), Utf8View("39516"), Utf8View("86057"), Utf8View("21309"), Utf8View("90257"), Utf8View("67875"), Utf8View("40162"), Utf8View("11356"), Utf8View("73650"), Utf8View("61810"), Utf8View("72013"), Utf8View("30431"), Utf8View("22461"), Utf8View("19512"), Utf8View("13375"), Utf8View("55307"), Utf8View("30625"), Utf8View("83849"), Utf8View("68908"), Utf8View("26689"), Utf8View("96451"), Utf8View("38193"), Utf8View("46820"), Utf8View("88885"), Utf8View("84935"), Utf8View("69035"), Utf8View("83144"), Utf8View("47537"), Utf8View("56616"), Utf8View("94983"), Utf8View("48033"), Utf8View("69952"), Utf8View("25486"), Utf8View("61547"), Utf8View("27385"), Utf8View("61860"), Utf8View("58048"), Utf8View("56910"), Utf8View("16807"), Utf8View("17871"), Utf8View("35258"), Utf8View("31387"), Utf8View("35458"), Utf8View("35576")]) +21)----------------------TableScan: customer_address projection=[ca_zip], partial_filters=[substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8View("24128"), Utf8View("76232"), Utf8View("65084"), Utf8View("87816"), Utf8View("83926"), Utf8View("77556"), Utf8View("20548"), Utf8View("26231"), Utf8View("43848"), Utf8View("15126"), Utf8View("91137"), Utf8View("61265"), Utf8View("98294"), Utf8View("25782"), Utf8View("17920"), Utf8View("18426"), Utf8View("98235"), Utf8View("40081"), Utf8View("84093"), Utf8View("28577"), Utf8View("55565"), Utf8View("17183"), Utf8View("54601"), Utf8View("67897"), Utf8View("22752"), Utf8View("86284"), Utf8View("18376"), Utf8View("38607"), Utf8View("45200"), Utf8View("21756"), Utf8View("29741"), Utf8View("96765"), Utf8View("23932"), Utf8View("89360"), Utf8View("29839"), Utf8View("25989"), Utf8View("28898"), Utf8View("91068"), Utf8View("72550"), Utf8View("10390"), Utf8View("18845"), Utf8View("47770"), Utf8View("82636"), Utf8View("41367"), Utf8View("76638"), Utf8View("86198"), Utf8View("81312"), Utf8View("37126"), Utf8View("39192"), Utf8View("88424"), Utf8View("72175"), Utf8View("81426"), Utf8View("53672"), Utf8View("10445"), Utf8View("42666"), Utf8View("66864"), Utf8View("66708"), Utf8View("41248"), Utf8View("48583"), Utf8View("82276"), Utf8View("18842"), Utf8View("78890"), Utf8View("49448"), Utf8View("14089"), Utf8View("38122"), Utf8View("34425"), Utf8View("79077"), Utf8View("19849"), Utf8View("43285"), Utf8View("39861"), Utf8View("66162"), Utf8View("77610"), Utf8View("13695"), Utf8View("99543"), Utf8View("83444"), Utf8View("83041"), Utf8View("12305"), Utf8View("57665"), Utf8View("68341"), Utf8View("25003"), Utf8View("57834"), Utf8View("62878"), Utf8View("49130"), Utf8View("81096"), Utf8View("18840"), Utf8View("27700"), Utf8View("23470"), Utf8View("50412"), Utf8View("21195"), Utf8View("16021"), Utf8View("76107"), Utf8View("71954"), Utf8View("68309"), Utf8View("18119"), Utf8View("98359"), Utf8View("64544"), Utf8View("10336"), Utf8View("86379"), Utf8View("27068"), Utf8View("39736"), Utf8View("98569"), Utf8View("28915"), Utf8View("24206"), Utf8View("56529"), Utf8View("57647"), Utf8View("54917"), Utf8View("42961"), Utf8View("91110"), Utf8View("63981"), Utf8View("14922"), Utf8View("36420"), Utf8View("23006"), Utf8View("67467"), Utf8View("32754"), Utf8View("30903"), Utf8View("20260"), Utf8View("31671"), Utf8View("51798"), Utf8View("72325"), Utf8View("85816"), Utf8View("68621"), Utf8View("13955"), Utf8View("36446"), Utf8View("41766"), Utf8View("68806"), Utf8View("16725"), Utf8View("15146"), Utf8View("22744"), Utf8View("35850"), Utf8View("88086"), Utf8View("51649"), Utf8View("18270"), Utf8View("52867"), Utf8View("39972"), Utf8View("96976"), Utf8View("63792"), Utf8View("11376"), Utf8View("94898"), Utf8View("13595"), Utf8View("10516"), Utf8View("90225"), Utf8View("58943"), Utf8View("39371"), Utf8View("94945"), Utf8View("28587"), Utf8View("96576"), Utf8View("57855"), Utf8View("28488"), Utf8View("26105"), Utf8View("83933"), Utf8View("25858"), Utf8View("34322"), Utf8View("44438"), Utf8View("73171"), Utf8View("30122"), Utf8View("34102"), Utf8View("22685"), Utf8View("71256"), Utf8View("78451"), Utf8View("54364"), Utf8View("13354"), Utf8View("45375"), Utf8View("40558"), Utf8View("56458"), Utf8View("28286"), Utf8View("45266"), Utf8View("47305"), Utf8View("69399"), Utf8View("83921"), Utf8View("26233"), Utf8View("11101"), Utf8View("15371"), Utf8View("69913"), Utf8View("35942"), Utf8View("15882"), Utf8View("25631"), Utf8View("24610"), Utf8View("44165"), Utf8View("99076"), Utf8View("33786"), Utf8View("70738"), Utf8View("26653"), Utf8View("14328"), Utf8View("72305"), Utf8View("62496"), Utf8View("22152"), Utf8View("10144"), Utf8View("64147"), Utf8View("48425"), Utf8View("14663"), Utf8View("21076"), Utf8View("18799"), Utf8View("30450"), Utf8View("63089"), Utf8View("81019"), Utf8View("68893"), Utf8View("24996"), Utf8View("51200"), Utf8View("51211"), Utf8View("45692"), Utf8View("92712"), Utf8View("70466"), Utf8View("79994"), Utf8View("22437"), Utf8View("25280"), Utf8View("38935"), Utf8View("71791"), Utf8View("73134"), Utf8View("56571"), Utf8View("14060"), Utf8View("19505"), Utf8View("72425"), Utf8View("56575"), Utf8View("74351"), Utf8View("68786"), Utf8View("51650"), Utf8View("20004"), Utf8View("18383"), Utf8View("76614"), Utf8View("11634"), Utf8View("18906"), Utf8View("15765"), Utf8View("41368"), Utf8View("73241"), Utf8View("76698"), Utf8View("78567"), Utf8View("97189"), Utf8View("28545"), Utf8View("76231"), Utf8View("75691"), Utf8View("22246"), Utf8View("51061"), Utf8View("90578"), Utf8View("56691"), Utf8View("68014"), Utf8View("51103"), Utf8View("94167"), Utf8View("57047"), Utf8View("14867"), Utf8View("73520"), Utf8View("15734"), Utf8View("63435"), Utf8View("25733"), Utf8View("35474"), Utf8View("24676"), Utf8View("94627"), Utf8View("53535"), Utf8View("17879"), Utf8View("15559"), Utf8View("53268"), Utf8View("59166"), Utf8View("11928"), Utf8View("59402"), Utf8View("33282"), Utf8View("45721"), Utf8View("43933"), Utf8View("68101"), Utf8View("33515"), Utf8View("36634"), Utf8View("71286"), Utf8View("19736"), Utf8View("58058"), Utf8View("55253"), Utf8View("67473"), Utf8View("41918"), Utf8View("19515"), Utf8View("36495"), Utf8View("19430"), Utf8View("22351"), Utf8View("77191"), Utf8View("91393"), Utf8View("49156"), Utf8View("50298"), Utf8View("87501"), Utf8View("18652"), Utf8View("53179"), Utf8View("18767"), Utf8View("63193"), Utf8View("23968"), Utf8View("65164"), Utf8View("68880"), Utf8View("21286"), Utf8View("72823"), Utf8View("58470"), Utf8View("67301"), Utf8View("13394"), Utf8View("31016"), Utf8View("70372"), Utf8View("67030"), Utf8View("40604"), Utf8View("24317"), Utf8View("45748"), Utf8View("39127"), Utf8View("26065"), Utf8View("77721"), Utf8View("31029"), Utf8View("31880"), Utf8View("60576"), Utf8View("24671"), Utf8View("45549"), Utf8View("13376"), Utf8View("50016"), Utf8View("33123"), Utf8View("19769"), Utf8View("22927"), Utf8View("97789"), Utf8View("46081"), Utf8View("72151"), Utf8View("15723"), Utf8View("46136"), Utf8View("51949"), Utf8View("68100"), Utf8View("96888"), Utf8View("64528"), Utf8View("14171"), Utf8View("79777"), Utf8View("28709"), Utf8View("11489"), Utf8View("25103"), Utf8View("32213"), Utf8View("78668"), Utf8View("22245"), Utf8View("15798"), Utf8View("27156"), Utf8View("37930"), Utf8View("62971"), Utf8View("21337"), Utf8View("51622"), Utf8View("67853"), Utf8View("10567"), Utf8View("38415"), Utf8View("15455"), Utf8View("58263"), Utf8View("42029"), Utf8View("60279"), Utf8View("37125"), Utf8View("56240"), Utf8View("88190"), Utf8View("50308"), Utf8View("26859"), Utf8View("64457"), Utf8View("89091"), Utf8View("82136"), Utf8View("62377"), Utf8View("36233"), Utf8View("63837"), Utf8View("58078"), Utf8View("17043"), Utf8View("30010"), Utf8View("60099"), Utf8View("28810"), Utf8View("98025"), Utf8View("29178"), Utf8View("87343"), Utf8View("73273"), Utf8View("30469"), Utf8View("64034"), Utf8View("39516"), Utf8View("86057"), Utf8View("21309"), Utf8View("90257"), Utf8View("67875"), Utf8View("40162"), Utf8View("11356"), Utf8View("73650"), Utf8View("61810"), Utf8View("72013"), Utf8View("30431"), Utf8View("22461"), Utf8View("19512"), Utf8View("13375"), Utf8View("55307"), Utf8View("30625"), Utf8View("83849"), Utf8View("68908"), Utf8View("26689"), Utf8View("96451"), Utf8View("38193"), Utf8View("46820"), Utf8View("88885"), Utf8View("84935"), Utf8View("69035"), Utf8View("83144"), Utf8View("47537"), Utf8View("56616"), Utf8View("94983"), Utf8View("48033"), Utf8View("69952"), Utf8View("25486"), Utf8View("61547"), Utf8View("27385"), Utf8View("61860"), Utf8View("58048"), Utf8View("56910"), Utf8View("16807"), Utf8View("17871"), Utf8View("35258"), Utf8View("31387"), Utf8View("35458"), Utf8View("35576")])] +22)--------------SubqueryAlias: right +23)----------------SubqueryAlias: a1 +24)------------------Projection: substr(customer_address.ca_zip, Int64(1), Int64(5)) AS ca_zip +25)--------------------Filter: count(Int64(1)) > Int64(10) +26)----------------------Aggregate: groupBy=[[customer_address.ca_zip]], aggr=[[count(Int64(1))]] +27)------------------------Projection: customer_address.ca_zip +28)--------------------------Inner Join: customer_address.ca_address_sk = customer.c_current_addr_sk +29)----------------------------TableScan: customer_address projection=[ca_address_sk, ca_zip] +30)----------------------------Projection: customer.c_current_addr_sk +31)------------------------------Filter: customer.c_preferred_cust_flag = Utf8View("Y") +32)--------------------------------TableScan: customer projection=[c_current_addr_sk, c_preferred_cust_flag], partial_filters=[customer.c_preferred_cust_flag = Utf8View("Y")] +physical_plan +01)SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name], aggr=[sum(store_sales.ss_net_profit)] +04)------RepartitionExec: partitioning=Hash([s_store_name@0], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[s_store_name@1 as s_store_name], aggr=[sum(store_sales.ss_net_profit)] +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(substr(v1.ca_zip,Int64(1),Int64(2))@1, substr(store.s_zip,Int64(1),Int64(2))@3)], projection=[ss_net_profit@2, s_store_name@3] +07)------------CoalescePartitionsExec +08)--------------ProjectionExec: expr=[ca_zip@0 as ca_zip, substr(ca_zip@0, 1, 2) as substr(v1.ca_zip,Int64(1),Int64(2))] +09)----------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ca_zip@0, ca_zip@0)], NullsEqual: true +10)------------------CoalescePartitionsExec +11)--------------------AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[] +12)----------------------RepartitionExec: partitioning=Hash([ca_zip@0], 4), input_partitions=4 +13)------------------------AggregateExec: mode=Partial, gby=[ca_zip@0 as ca_zip], aggr=[] +14)--------------------------ProjectionExec: expr=[substr(ca_zip@0, 1, 5) as ca_zip] +15)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +16)------------------------------FilterExec: substr(ca_zip@0, 1, 5) IN (SET) ([24128, 76232, 65084, 87816, 83926, 77556, 20548, 26231, 43848, 15126, 91137, 61265, 98294, 25782, 17920, 18426, 98235, 40081, 84093, 28577, 55565, 17183, 54601, 67897, 22752, 86284, 18376, 38607, 45200, 21756, 29741, 96765, 23932, 89360, 29839, 25989, 28898, 91068, 72550, 10390, 18845, 47770, 82636, 41367, 76638, 86198, 81312, 37126, 39192, 88424, 72175, 81426, 53672, 10445, 42666, 66864, 66708, 41248, 48583, 82276, 18842, 78890, 49448, 14089, 38122, 34425, 79077, 19849, 43285, 39861, 66162, 77610, 13695, 99543, 83444, 83041, 12305, 57665, 68341, 25003, 57834, 62878, 49130, 81096, 18840, 27700, 23470, 50412, 21195, 16021, 76107, 71954, 68309, 18119, 98359, 64544, 10336, 86379, 27068, 39736, 98569, 28915, 24206, 56529, 57647, 54917, 42961, 91110, 63981, 14922, 36420, 23006, 67467, 32754, 30903, 20260, 31671, 51798, 72325, 85816, 68621, 13955, 36446, 41766, 68806, 16725, 15146, 22744, 35850, 88086, 51649, 18270, 52867, 39972, 96976, 63792, 11376, 94898, 13595, 10516, 90225, 58943, 39371, 94945, 28587, 96576, 57855, 28488, 26105, 83933, 25858, 34322, 44438, 73171, 30122, 34102, 22685, 71256, 78451, 54364, 13354, 45375, 40558, 56458, 28286, 45266, 47305, 69399, 83921, 26233, 11101, 15371, 69913, 35942, 15882, 25631, 24610, 44165, 99076, 33786, 70738, 26653, 14328, 72305, 62496, 22152, 10144, 64147, 48425, 14663, 21076, 18799, 30450, 63089, 81019, 68893, 24996, 51200, 51211, 45692, 92712, 70466, 79994, 22437, 25280, 38935, 71791, 73134, 56571, 14060, 19505, 72425, 56575, 74351, 68786, 51650, 20004, 18383, 76614, 11634, 18906, 15765, 41368, 73241, 76698, 78567, 97189, 28545, 76231, 75691, 22246, 51061, 90578, 56691, 68014, 51103, 94167, 57047, 14867, 73520, 15734, 63435, 25733, 35474, 24676, 94627, 53535, 17879, 15559, 53268, 59166, 11928, 59402, 33282, 45721, 43933, 68101, 33515, 36634, 71286, 19736, 58058, 55253, 67473, 41918, 19515, 36495, 19430, 22351, 77191, 91393, 49156, 50298, 87501, 18652, 53179, 18767, 63193, 23968, 65164, 68880, 21286, 72823, 58470, 67301, 13394, 31016, 70372, 67030, 40604, 24317, 45748, 39127, 26065, 77721, 31029, 31880, 60576, 24671, 45549, 13376, 50016, 33123, 19769, 22927, 97789, 46081, 72151, 15723, 46136, 51949, 68100, 96888, 64528, 14171, 79777, 28709, 11489, 25103, 32213, 78668, 22245, 15798, 27156, 37930, 62971, 21337, 51622, 67853, 10567, 38415, 15455, 58263, 42029, 60279, 37125, 56240, 88190, 50308, 26859, 64457, 89091, 82136, 62377, 36233, 63837, 58078, 17043, 30010, 60099, 28810, 98025, 29178, 87343, 73273, 30469, 64034, 39516, 86057, 21309, 90257, 67875, 40162, 11356, 73650, 61810, 72013, 30431, 22461, 19512, 13375, 55307, 30625, 83849, 68908, 26689, 96451, 38193, 46820, 88885, 84935, 69035, 83144, 47537, 56616, 94983, 48033, 69952, 25486, 61547, 27385, 61860, 58048, 56910, 16807, 17871, 35258, 31387, 35458, 35576]) +17)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_zip], file_type=vortex +18)------------------ProjectionExec: expr=[substr(ca_zip@0, 1, 5) as ca_zip] +19)--------------------FilterExec: count(Int64(1))@1 > 10, projection=[ca_zip@0] +20)----------------------AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[count(Int64(1))] +21)------------------------RepartitionExec: partitioning=Hash([ca_zip@0], 4), input_partitions=4 +22)--------------------------AggregateExec: mode=Partial, gby=[ca_zip@0 as ca_zip], aggr=[count(Int64(1))] +23)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +24)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_addr_sk@0, ca_address_sk@0)], projection=[ca_zip@2] +25)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_current_addr_sk], file_type=vortex, predicate: c_preferred_cust_flag@10 = Y +26)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_zip], file_type=vortex +27)------------ProjectionExec: expr=[ss_net_profit@0 as ss_net_profit, s_store_name@1 as s_store_name, s_zip@2 as s_zip, substr(s_zip@2, 1, 2) as substr(store.s_zip,Int64(1),Int64(2))] +28)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[ss_net_profit@4, s_store_name@1, s_zip@2] +29)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_zip], file_type=vortex +30)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_store_sk@2, ss_net_profit@3] +31)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_qoy@10 = 2 AND d_year@6 = 1998 +32)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no new file mode 100644 index 00000000000..e2273b410ae --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no @@ -0,0 +1,236 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ssr AS + (SELECT s_store_id AS store_id, + sum(ss_ext_sales_price) AS sales, + sum(coalesce(sr_return_amt, 0)) AS returns_, + sum(ss_net_profit - coalesce(sr_net_loss, 0)) AS profit + FROM store_sales + LEFT OUTER JOIN store_returns ON (ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number), date_dim, + store, + item, + promotion + WHERE ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ss_store_sk = s_store_sk + AND ss_item_sk = i_item_sk + AND i_current_price > 50 + AND ss_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY s_store_id) , + csr AS + (SELECT cp_catalog_page_id AS catalog_page_id, + sum(cs_ext_sales_price) AS sales, + sum(coalesce(cr_return_amount, 0)) AS returns_, + sum(cs_net_profit - coalesce(cr_net_loss, 0)) AS profit + FROM catalog_sales + LEFT OUTER JOIN catalog_returns ON (cs_item_sk = cr_item_sk + AND cs_order_number = cr_order_number), date_dim, + catalog_page, + item, + promotion + WHERE cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND cs_catalog_page_sk = cp_catalog_page_sk + AND cs_item_sk = i_item_sk + AND i_current_price > 50 + AND cs_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY cp_catalog_page_id) , + wsr AS + (SELECT web_site_id, + sum(ws_ext_sales_price) AS sales, + sum(coalesce(wr_return_amt, 0)) AS returns_, + sum(ws_net_profit - coalesce(wr_net_loss, 0)) AS profit + FROM web_sales + LEFT OUTER JOIN web_returns ON (ws_item_sk = wr_item_sk + AND ws_order_number = wr_order_number), date_dim, + web_site, + item, + promotion + WHERE ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ws_web_site_sk = web_site_sk + AND ws_item_sk = i_item_sk + AND i_current_price > 50 + AND ws_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY web_site_id) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + concat('store', store_id) AS id , + sales , + returns_ , + profit + FROM ssr + UNION ALL SELECT 'catalog channel' AS channel , + concat('catalog_page', catalog_page_id) AS id , + sales , + returns_ , + profit + FROM csr + UNION ALL SELECT 'web channel' AS channel , + concat('web_site', web_site_id) AS id , + sales , + returns_ , + profit + FROM wsr ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: x.channel ASC NULLS FIRST, x.id ASC NULLS FIRST, fetch=100 +02)--Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns_) AS returns_, sum(x.profit) AS profit +03)----Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns_), sum(x.profit)]] +04)------SubqueryAlias: x +05)--------Union +06)----------Projection: Utf8("store channel") AS channel, concat(Utf8View("store"), ssr.store_id) AS id, ssr.sales, ssr.returns_, ssr.profit +07)------------SubqueryAlias: ssr +08)--------------Projection: store.s_store_id AS store_id, sum(store_sales.ss_ext_sales_price) AS sales, sum(coalesce(store_returns.sr_return_amt,Int64(0))) AS returns_, sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0))) AS profit +09)----------------Aggregate: groupBy=[[store.s_store_id]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE Decimal128(0.00,22,2) END) AS sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))]] +10)------------------Projection: CAST(store_returns.sr_return_amt AS Decimal128(22, 2)) AS __common_expr_1, CAST(store_returns.sr_net_loss AS Decimal128(22, 2)) AS __common_expr_2, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store.s_store_id +11)--------------------Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk +12)----------------------Projection: store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_id +13)------------------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +14)--------------------------Projection: store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_id +15)----------------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +16)------------------------------Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss +17)--------------------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +18)----------------------------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss +19)------------------------------------Left Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +20)--------------------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_ext_sales_price, ss_net_profit] +21)--------------------------------------TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_amt, sr_net_loss] +22)----------------------------------Projection: date_dim.d_date_sk +23)------------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +24)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +25)------------------------------TableScan: store projection=[s_store_sk, s_store_id] +26)--------------------------Projection: item.i_item_sk +27)----------------------------Filter: item.i_current_price > Decimal128(50.00,7,2) +28)------------------------------TableScan: item projection=[i_item_sk, i_current_price], partial_filters=[item.i_current_price > Decimal128(50.00,7,2)] +29)----------------------Projection: promotion.p_promo_sk +30)------------------------Filter: promotion.p_channel_tv = Utf8View("N") +31)--------------------------TableScan: promotion projection=[p_promo_sk, p_channel_tv], partial_filters=[promotion.p_channel_tv = Utf8View("N")] +32)----------Projection: Utf8("catalog channel") AS channel, concat(Utf8View("catalog_page"), csr.catalog_page_id) AS id, csr.sales, csr.returns_, csr.profit +33)------------SubqueryAlias: csr +34)--------------Projection: catalog_page.cp_catalog_page_id AS catalog_page_id, sum(catalog_sales.cs_ext_sales_price) AS sales, sum(coalesce(catalog_returns.cr_return_amount,Int64(0))) AS returns_, sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0))) AS profit +35)----------------Aggregate: groupBy=[[catalog_page.cp_catalog_page_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE Decimal128(0.00,22,2) END) AS sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))]] +36)------------------Projection: CAST(catalog_returns.cr_return_amount AS Decimal128(22, 2)) AS __common_expr_3, CAST(catalog_returns.cr_net_loss AS Decimal128(22, 2)) AS __common_expr_4, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_page.cp_catalog_page_id +37)--------------------Inner Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk +38)----------------------Projection: catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss, catalog_page.cp_catalog_page_id +39)------------------------Inner Join: catalog_sales.cs_item_sk = item.i_item_sk +40)--------------------------Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss, catalog_page.cp_catalog_page_id +41)----------------------------Inner Join: catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk +42)------------------------------Projection: catalog_sales.cs_catalog_page_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss +43)--------------------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +44)----------------------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss +45)------------------------------------Left Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number +46)--------------------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_ext_sales_price, cs_net_profit] +47)--------------------------------------TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_amount, cr_net_loss] +48)----------------------------------Projection: date_dim.d_date_sk +49)------------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +50)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +51)------------------------------TableScan: catalog_page projection=[cp_catalog_page_sk, cp_catalog_page_id] +52)--------------------------Projection: item.i_item_sk +53)----------------------------Filter: item.i_current_price > Decimal128(50.00,7,2) +54)------------------------------TableScan: item projection=[i_item_sk, i_current_price], partial_filters=[item.i_current_price > Decimal128(50.00,7,2)] +55)----------------------Projection: promotion.p_promo_sk +56)------------------------Filter: promotion.p_channel_tv = Utf8View("N") +57)--------------------------TableScan: promotion projection=[p_promo_sk, p_channel_tv], partial_filters=[promotion.p_channel_tv = Utf8View("N")] +58)----------Projection: Utf8("web channel") AS channel, concat(Utf8View("web_site"), wsr.web_site_id) AS id, wsr.sales, wsr.returns_, wsr.profit +59)------------SubqueryAlias: wsr +60)--------------Projection: web_site.web_site_id, sum(web_sales.ws_ext_sales_price) AS sales, sum(coalesce(web_returns.wr_return_amt,Int64(0))) AS returns_, sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0))) AS profit +61)----------------Aggregate: groupBy=[[web_site.web_site_id]], aggr=[[sum(web_sales.ws_ext_sales_price), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE Decimal128(0.00,22,2) END) AS sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE Decimal128(0.00,22,2) END) AS sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))]] +62)------------------Projection: CAST(web_returns.wr_return_amt AS Decimal128(22, 2)) AS __common_expr_5, CAST(web_returns.wr_net_loss AS Decimal128(22, 2)) AS __common_expr_6, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_site.web_site_id +63)--------------------Inner Join: web_sales.ws_promo_sk = promotion.p_promo_sk +64)----------------------Projection: web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss, web_site.web_site_id +65)------------------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +66)--------------------------Projection: web_sales.ws_item_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss, web_site.web_site_id +67)----------------------------Inner Join: web_sales.ws_web_site_sk = web_site.web_site_sk +68)------------------------------Projection: web_sales.ws_item_sk, web_sales.ws_web_site_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss +69)--------------------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +70)----------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_web_site_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss +71)------------------------------------Left Join: web_sales.ws_item_sk = web_returns.wr_item_sk, web_sales.ws_order_number = web_returns.wr_order_number +72)--------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_web_site_sk, ws_promo_sk, ws_order_number, ws_ext_sales_price, ws_net_profit] +73)--------------------------------------TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] +74)----------------------------------Projection: date_dim.d_date_sk +75)------------------------------------Filter: date_dim.d_date >= Date32("2000-08-23") AND date_dim.d_date <= Date32("2000-09-22") +76)--------------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-08-23"), date_dim.d_date <= Date32("2000-09-22")] +77)------------------------------TableScan: web_site projection=[web_site_sk, web_site_id] +78)--------------------------Projection: item.i_item_sk +79)----------------------------Filter: item.i_current_price > Decimal128(50.00,7,2) +80)------------------------------TableScan: item projection=[i_item_sk, i_current_price], partial_filters=[item.i_current_price > Decimal128(50.00,7,2)] +81)----------------------Projection: promotion.p_promo_sk +82)------------------------Filter: promotion.p_channel_tv = Utf8View("N") +83)--------------------------TableScan: promotion projection=[p_promo_sk, p_channel_tv], partial_filters=[promotion.p_channel_tv = Utf8View("N")] +physical_plan +01)SortPreservingMergeExec: [channel@0 ASC, id@1 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[channel@0 ASC, id@1 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns_)@4 as returns_, sum(x.profit)@5 as profit] +04)------AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +05)--------RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 4), input_partitions=12 +06)----------AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns_), sum(x.profit)] +07)------------UnionExec +08)--------------ProjectionExec: expr=[store channel as channel, concat(store, s_store_id@0) as id, sum(store_sales.ss_ext_sales_price)@1 as sales, sum(coalesce(store_returns.sr_return_amt,Int64(0)))@2 as returns_, sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))@3 as profit] +09)----------------AggregateExec: mode=FinalPartitioned, gby=[s_store_id@0 as s_store_id], aggr=[sum(store_sales.ss_ext_sales_price), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE 0.00 END) as sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))] +10)------------------RepartitionExec: partitioning=Hash([s_store_id@0], 4), input_partitions=4 +11)--------------------AggregateExec: mode=Partial, gby=[s_store_id@4 as s_store_id], aggr=[sum(store_sales.ss_ext_sales_price), sum(CASE WHEN __common_expr_1 IS NOT NULL THEN __common_expr_1 ELSE 0.00 END) as sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - CASE WHEN __common_expr_2 IS NOT NULL THEN __common_expr_2 ELSE 0.00 END) as sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))] +12)----------------------ProjectionExec: expr=[CAST(sr_return_amt@0 AS Decimal128(22, 2)) as __common_expr_1, CAST(sr_net_loss@1 AS Decimal128(22, 2)) as __common_expr_2, ss_ext_sales_price@2 as ss_ext_sales_price, ss_net_profit@3 as ss_net_profit, s_store_id@4 as s_store_id] +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ss_promo_sk@0)], projection=[sr_return_amt@4, sr_net_loss@5, ss_ext_sales_price@2, ss_net_profit@3, s_store_id@6] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_tv@11 = N +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[ss_promo_sk@2, ss_ext_sales_price@3, ss_net_profit@4, sr_return_amt@5, sr_net_loss@6, s_store_id@7] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_current_price@5 > 50.00 +17)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@1)], projection=[ss_item_sk@2, ss_promo_sk@4, ss_ext_sales_price@5, ss_net_profit@6, sr_return_amt@7, sr_net_loss@8, s_store_id@1] +18)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_id], file_type=vortex +19)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_store_sk@3, ss_promo_sk@4, ss_ext_sales_price@5, ss_net_profit@6, sr_return_amt@7, sr_net_loss@8] +20)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +21)--------------------------------HashJoinExec: mode=Partitioned, join_type=Right, on=[(sr_item_sk@0, ss_item_sk@1), (sr_ticket_number@1, ss_ticket_number@4)], projection=[ss_sold_date_sk@4, ss_item_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_ext_sales_price@9, ss_net_profit@10, sr_return_amt@2, sr_net_loss@3] +22)----------------------------------RepartitionExec: partitioning=Hash([sr_item_sk@0, sr_ticket_number@1], 4), input_partitions=4 +23)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_ticket_number, sr_return_amt, sr_net_loss], file_type=vortex +24)----------------------------------RepartitionExec: partitioning=Hash([ss_item_sk@1, ss_ticket_number@4], 4), input_partitions=4 +25)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_ext_sales_price, ss_net_profit], file_type=vortex +26)--------------ProjectionExec: expr=[catalog channel as channel, concat(catalog_page, cp_catalog_page_id@0) as id, sum(catalog_sales.cs_ext_sales_price)@1 as sales, sum(coalesce(catalog_returns.cr_return_amount,Int64(0)))@2 as returns_, sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))@3 as profit] +27)----------------AggregateExec: mode=FinalPartitioned, gby=[cp_catalog_page_id@0 as cp_catalog_page_id], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE 0.00 END) as sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE 0.00 END) as sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))] +28)------------------RepartitionExec: partitioning=Hash([cp_catalog_page_id@0], 4), input_partitions=4 +29)--------------------AggregateExec: mode=Partial, gby=[cp_catalog_page_id@4 as cp_catalog_page_id], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(CASE WHEN __common_expr_3 IS NOT NULL THEN __common_expr_3 ELSE 0.00 END) as sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - CASE WHEN __common_expr_4 IS NOT NULL THEN __common_expr_4 ELSE 0.00 END) as sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))] +30)----------------------ProjectionExec: expr=[CAST(cr_return_amount@0 AS Decimal128(22, 2)) as __common_expr_3, CAST(cr_net_loss@1 AS Decimal128(22, 2)) as __common_expr_4, cs_ext_sales_price@2 as cs_ext_sales_price, cs_net_profit@3 as cs_net_profit, cp_catalog_page_id@4 as cp_catalog_page_id] +31)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, cs_promo_sk@0)], projection=[cr_return_amount@4, cr_net_loss@5, cs_ext_sales_price@2, cs_net_profit@3, cp_catalog_page_id@6] +32)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_tv@11 = N +33)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@0)], projection=[cs_promo_sk@2, cs_ext_sales_price@3, cs_net_profit@4, cr_return_amount@5, cr_net_loss@6, cp_catalog_page_id@7] +34)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_current_price@5 > 50.00 +35)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cs_catalog_page_sk@0, cp_catalog_page_sk@0)], projection=[cs_item_sk@1, cs_promo_sk@2, cs_ext_sales_price@3, cs_net_profit@4, cr_return_amount@5, cr_net_loss@6, cp_catalog_page_id@8] +36)------------------------------CoalescePartitionsExec +37)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_catalog_page_sk@2, cs_item_sk@3, cs_promo_sk@4, cs_ext_sales_price@5, cs_net_profit@6, cr_return_amount@7, cr_net_loss@8] +38)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +39)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(cr_item_sk@0, cs_item_sk@2), (cr_order_number@1, cs_order_number@4)], projection=[cs_sold_date_sk@4, cs_catalog_page_sk@5, cs_item_sk@6, cs_promo_sk@7, cs_ext_sales_price@9, cs_net_profit@10, cr_return_amount@2, cr_net_loss@3] +40)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_item_sk, cr_order_number, cr_return_amount, cr_net_loss], file_type=vortex +41)------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_ext_sales_price, cs_net_profit], file_type=vortex +42)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +43)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_page.vortex]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id], file_type=vortex +44)--------------ProjectionExec: expr=[web channel as channel, concat(web_site, web_site_id@0) as id, sum(web_sales.ws_ext_sales_price)@1 as sales, sum(coalesce(web_returns.wr_return_amt,Int64(0)))@2 as returns_, sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))@3 as profit] +45)----------------AggregateExec: mode=FinalPartitioned, gby=[web_site_id@0 as web_site_id], aggr=[sum(web_sales.ws_ext_sales_price), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE 0.00 END) as sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE 0.00 END) as sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))] +46)------------------RepartitionExec: partitioning=Hash([web_site_id@0], 4), input_partitions=4 +47)--------------------AggregateExec: mode=Partial, gby=[web_site_id@4 as web_site_id], aggr=[sum(web_sales.ws_ext_sales_price), sum(CASE WHEN __common_expr_5 IS NOT NULL THEN __common_expr_5 ELSE 0.00 END) as sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - CASE WHEN __common_expr_6 IS NOT NULL THEN __common_expr_6 ELSE 0.00 END) as sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))] +48)----------------------ProjectionExec: expr=[CAST(wr_return_amt@0 AS Decimal128(22, 2)) as __common_expr_5, CAST(wr_net_loss@1 AS Decimal128(22, 2)) as __common_expr_6, ws_ext_sales_price@2 as ws_ext_sales_price, ws_net_profit@3 as ws_net_profit, web_site_id@4 as web_site_id] +49)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_promo_sk@0, ws_promo_sk@0)], projection=[wr_return_amt@4, wr_net_loss@5, ws_ext_sales_price@2, ws_net_profit@3, web_site_id@6] +50)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/promotion.vortex]]}, projection=[p_promo_sk], file_type=vortex, predicate: p_channel_tv@11 = N +51)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@0)], projection=[ws_promo_sk@2, ws_ext_sales_price@3, ws_net_profit@4, wr_return_amt@5, wr_net_loss@6, web_site_id@7] +52)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_current_price@5 > 50.00 +53)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(web_site_sk@0, ws_web_site_sk@1)], projection=[ws_item_sk@2, ws_promo_sk@4, ws_ext_sales_price@5, ws_net_profit@6, wr_return_amt@7, wr_net_loss@8, web_site_id@1] +54)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_site.vortex]]}, projection=[web_site_sk, web_site_id], file_type=vortex +55)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_web_site_sk@3, ws_promo_sk@4, ws_ext_sales_price@5, ws_net_profit@6, wr_return_amt@7, wr_net_loss@8] +56)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-08-23 AND d_date@2 <= 2000-09-22 +57)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(wr_item_sk@0, ws_item_sk@1), (wr_order_number@1, ws_order_number@4)], projection=[ws_sold_date_sk@4, ws_item_sk@5, ws_web_site_sk@6, ws_promo_sk@7, ws_ext_sales_price@9, ws_net_profit@10, wr_return_amt@2, wr_net_loss@3] +58)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss], file_type=vortex +59)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_web_site_sk, ws_promo_sk, ws_order_number, ws_ext_sales_price, ws_net_profit], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no new file mode 100644 index 00000000000..e5acd1d66bc --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no @@ -0,0 +1,140 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH customer_total_return AS + (SELECT cr_returning_customer_sk AS ctr_customer_sk , + ca_state AS ctr_state, + sum(cr_return_amt_inc_tax) AS ctr_total_return + FROM catalog_returns , + date_dim , + customer_address + WHERE cr_returned_date_sk = d_date_sk + AND d_year = 2000 + AND cr_returning_addr_sk = ca_address_sk + GROUP BY cr_returning_customer_sk , + ca_state) +SELECT c_customer_id, + c_salutation, + c_first_name, + c_last_name, + ca_street_number, + ca_street_name , + ca_street_type, + ca_suite_number, + ca_city, + ca_county, + ca_state, + ca_zip, + ca_country, + ca_gmt_offset , + ca_location_type, + ctr_total_return +FROM customer_total_return ctr1 , + customer_address , + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_state = ctr2.ctr_state) + AND ca_address_sk = c_current_addr_sk + AND ca_state = 'GA' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id, + c_salutation, + c_first_name, + c_last_name, + ca_street_number, + ca_street_name , + ca_street_type, + ca_suite_number, + ca_city, + ca_county, + ca_state, + ca_zip, + ca_country, + ca_gmt_offset , + ca_location_type, + ctr_total_return +LIMIT 100; +---- +logical_plan +01)Sort: customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer_address.ca_street_number ASC NULLS LAST, customer_address.ca_street_name ASC NULLS LAST, customer_address.ca_street_type ASC NULLS LAST, customer_address.ca_suite_number ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, customer_address.ca_county ASC NULLS LAST, customer_address.ca_state ASC NULLS LAST, customer_address.ca_zip ASC NULLS LAST, customer_address.ca_country ASC NULLS LAST, customer_address.ca_gmt_offset ASC NULLS LAST, customer_address.ca_location_type ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST, fetch=100 +02)--Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, ctr1.ctr_total_return +03)----LeftSemi Join: ctr1.ctr_state = __scalar_sq_1.ctr_state Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) +04)------Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name +05)--------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +06)----------Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_current_addr_sk, customer.c_salutation, customer.c_first_name, customer.c_last_name +07)------------Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk +08)--------------SubqueryAlias: ctr1 +09)----------------SubqueryAlias: customer_total_return +10)------------------Projection: catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return +11)--------------------Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] +12)----------------------Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_return_amt_inc_tax, customer_address.ca_state +13)------------------------Inner Join: catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk +14)--------------------------Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_returning_addr_sk, catalog_returns.cr_return_amt_inc_tax +15)----------------------------Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk +16)------------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] +17)------------------------------Projection: date_dim.d_date_sk +18)--------------------------------Filter: date_dim.d_year = Int64(2000) +19)----------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +20)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +21)--------------TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name] +22)----------Filter: customer_address.ca_state = Utf8View("GA") +23)------------TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type], partial_filters=[customer_address.ca_state = Utf8View("GA")] +24)------SubqueryAlias: __scalar_sq_1 +25)--------Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_state +26)----------Aggregate: groupBy=[[ctr2.ctr_state]], aggr=[[avg(ctr2.ctr_total_return)]] +27)------------SubqueryAlias: ctr2 +28)--------------SubqueryAlias: customer_total_return +29)----------------Projection: customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return +30)------------------Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] +31)--------------------Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_return_amt_inc_tax, customer_address.ca_state +32)----------------------Inner Join: catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk +33)------------------------Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_returning_addr_sk, catalog_returns.cr_return_amt_inc_tax +34)--------------------------Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk +35)----------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] +36)----------------------------Projection: date_dim.d_date_sk +37)------------------------------Filter: date_dim.d_year = Int64(2000) +38)--------------------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +39)------------------------TableScan: customer_address projection=[ca_address_sk, ca_state] +physical_plan +01)SortPreservingMergeExec: [c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, ca_street_number@4 ASC NULLS LAST, ca_street_name@5 ASC NULLS LAST, ca_street_type@6 ASC NULLS LAST, ca_suite_number@7 ASC NULLS LAST, ca_city@8 ASC NULLS LAST, ca_county@9 ASC NULLS LAST, ca_state@10 ASC NULLS LAST, ca_zip@11 ASC NULLS LAST, ca_country@12 ASC NULLS LAST, ca_gmt_offset@13 ASC NULLS LAST, ca_location_type@14 ASC NULLS LAST, ctr_total_return@15 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, ca_street_number@4 ASC NULLS LAST, ca_street_name@5 ASC NULLS LAST, ca_street_type@6 ASC NULLS LAST, ca_suite_number@7 ASC NULLS LAST, ca_city@8 ASC NULLS LAST, ca_county@9 ASC NULLS LAST, ca_zip@11 ASC NULLS LAST, ca_country@12 ASC NULLS LAST, ca_gmt_offset@13 ASC NULLS LAST, ca_location_type@14 ASC NULLS LAST, ctr_total_return@15 ASC NULLS LAST], preserve_partitioning=[true] +03)----HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ctr_state@0, ctr_state@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[c_customer_id@13, c_salutation@14, c_first_name@15, c_last_name@16, ca_street_number@2, ca_street_name@3, ca_street_type@4, ca_suite_number@5, ca_city@6, ca_county@7, ca_state@8, ca_zip@9, ca_country@10, ca_gmt_offset@11, ca_location_type@12, ctr_total_return@1] +04)------CoalescePartitionsExec +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@3)], projection=[ctr_state@12, ctr_total_return@13, ca_street_number@1, ca_street_name@2, ca_street_type@3, ca_suite_number@4, ca_city@5, ca_county@6, ca_state@7, ca_zip@8, ca_country@9, ca_gmt_offset@10, ca_location_type@11, c_customer_id@14, c_salutation@16, c_first_name@17, c_last_name@18] +06)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type], file_type=vortex, predicate: ca_state@8 = GA +07)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_state@1, ctr_total_return@2, c_customer_id@4, c_current_addr_sk@5, c_salutation@6, c_first_name@7, c_last_name@8] +08)------------CoalescePartitionsExec +09)--------------ProjectionExec: expr=[cr_returning_customer_sk@0 as ctr_customer_sk, ca_state@1 as ctr_state, sum(catalog_returns.cr_return_amt_inc_tax)@2 as ctr_total_return] +10)----------------AggregateExec: mode=FinalPartitioned, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] +11)------------------RepartitionExec: partitioning=Hash([cr_returning_customer_sk@0, ca_state@1], 4), input_partitions=4 +12)--------------------AggregateExec: mode=Partial, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] +13)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +14)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_returning_addr_sk@1, ca_address_sk@0)], projection=[cr_returning_customer_sk@0, cr_return_amt_inc_tax@2, ca_state@4] +15)--------------------------CoalescePartitionsExec +16)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cr_returned_date_sk@0)], projection=[cr_returning_customer_sk@2, cr_returning_addr_sk@3, cr_return_amt_inc_tax@4] +17)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +18)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +19)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax], file_type=vortex +20)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex +21)------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name], file_type=vortex +23)------ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_state@0 as ctr_state] +24)--------AggregateExec: mode=FinalPartitioned, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] +25)----------RepartitionExec: partitioning=Hash([ctr_state@0], 4), input_partitions=4 +26)------------AggregateExec: mode=Partial, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] +27)--------------ProjectionExec: expr=[ca_state@1 as ctr_state, sum(catalog_returns.cr_return_amt_inc_tax)@2 as ctr_total_return] +28)----------------AggregateExec: mode=FinalPartitioned, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] +29)------------------RepartitionExec: partitioning=Hash([cr_returning_customer_sk@0, ca_state@1], 4), input_partitions=4 +30)--------------------AggregateExec: mode=Partial, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] +31)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +32)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_returning_addr_sk@1, ca_address_sk@0)], projection=[cr_returning_customer_sk@0, cr_return_amt_inc_tax@2, ca_state@4] +33)--------------------------CoalescePartitionsExec +34)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cr_returned_date_sk@0)], projection=[cr_returning_customer_sk@2, cr_returning_addr_sk@3, cr_return_amt_inc_tax@4] +35)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +36)------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +37)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax], file_type=vortex +38)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no new file mode 100644 index 00000000000..56e3af18835 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id , + i_item_desc , + i_current_price +FROM item, + inventory, + date_dim, + store_sales +WHERE i_current_price BETWEEN 62 AND 62+30 + AND inv_item_sk = i_item_sk + AND d_date_sk=inv_date_sk + AND d_date BETWEEN cast('2000-05-25' AS date) AND cast('2000-07-24' AS date) + AND i_manufact_id IN (129, + 270, + 821, + 423) + AND inv_quantity_on_hand BETWEEN 100 AND 500 + AND ss_item_sk = i_item_sk +GROUP BY i_item_id, + i_item_desc, + i_current_price +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan +01)Sort: item.i_item_id ASC NULLS LAST, fetch=100 +02)--Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] +03)----Projection: item.i_item_id, item.i_item_desc, item.i_current_price +04)------LeftSemi Join: item.i_item_sk = store_sales.ss_item_sk +05)--------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price +06)----------LeftSemi Join: inventory.inv_date_sk = date_dim.d_date_sk +07)------------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price, inventory.inv_date_sk +08)--------------Inner Join: item.i_item_sk = inventory.inv_item_sk +09)----------------Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price +10)------------------Filter: item.i_current_price >= Decimal128(62.00,7,2) AND item.i_current_price <= Decimal128(92.00,7,2) AND item.i_manufact_id IN ([Int64(129), Int64(270), Int64(821), Int64(423)]) +11)--------------------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_manufact_id], partial_filters=[item.i_current_price >= Decimal128(62.00,7,2), item.i_current_price <= Decimal128(92.00,7,2), item.i_manufact_id IN ([Int64(129), Int64(270), Int64(821), Int64(423)])] +12)----------------Projection: inventory.inv_date_sk, inventory.inv_item_sk +13)------------------Filter: inventory.inv_quantity_on_hand >= Int32(100) AND inventory.inv_quantity_on_hand <= Int32(500) +14)--------------------TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand], partial_filters=[inventory.inv_quantity_on_hand >= Int32(100), inventory.inv_quantity_on_hand <= Int32(500)] +15)------------Projection: date_dim.d_date_sk +16)--------------Filter: date_dim.d_date >= Date32("2000-05-25") AND date_dim.d_date <= Date32("2000-07-24") +17)----------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-05-25"), date_dim.d_date <= Date32("2000-07-24")] +18)--------TableScan: store_sales projection=[ss_item_sk] +physical_plan +01)SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] +03)----AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] +04)------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_current_price@2], 4), input_partitions=4 +05)--------AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] +06)----------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_item_sk@0, ss_item_sk@0)], projection=[i_item_id@1, i_item_desc@2, i_current_price@3] +07)------------CoalescePartitionsExec +08)--------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, inv_date_sk@4)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-05-25 AND d_date@2 <= 2000-07-24 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3, inv_date_sk@4] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], file_type=vortex, predicate: i_current_price@5 >= 62.00 AND i_current_price@5 <= 92.00 AND i_manufact_id@13 IN (SET) ([129, 270, 821, 423]) +12)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk], file_type=vortex, predicate: inv_quantity_on_hand@3 >= 100 AND inv_quantity_on_hand@3 <= 500 +14)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no new file mode 100644 index 00000000000..75cdabbe3bf --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no @@ -0,0 +1,203 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH sr_items AS + (SELECT i_item_id item_id, + sum(sr_return_quantity) sr_item_qty + FROM store_returns, + item, + date_dim + WHERE sr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND sr_returned_date_sk = d_date_sk + GROUP BY i_item_id), + cr_items AS + (SELECT i_item_id item_id, + sum(cr_return_quantity) cr_item_qty + FROM catalog_returns, + item, + date_dim + WHERE cr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND cr_returned_date_sk = d_date_sk + GROUP BY i_item_id), + wr_items AS + (SELECT i_item_id item_id, + sum(wr_return_quantity) wr_item_qty + FROM web_returns, + item, + date_dim + WHERE wr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND wr_returned_date_sk = d_date_sk + GROUP BY i_item_id) +SELECT sr_items.item_id , + sr_item_qty , + (sr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 sr_dev , + cr_item_qty , + (cr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 cr_dev , + wr_item_qty , + (wr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 wr_dev , + (sr_item_qty+cr_item_qty+wr_item_qty)/3.0 average +FROM sr_items , + cr_items , + wr_items +WHERE sr_items.item_id=cr_items.item_id + AND sr_items.item_id=wr_items.item_id +ORDER BY sr_items.item_id NULLS FIRST, + sr_item_qty NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sr_items.item_id ASC NULLS FIRST, fetch=100 +02)--Projection: sr_items.item_id, sr_items.sr_item_qty, CAST(sr_items.sr_item_qty AS Float64) / __common_expr_7 / Float64(3) * Float64(100) AS sr_dev, cr_items.cr_item_qty, CAST(cr_items.cr_item_qty AS Float64) / __common_expr_7 / Float64(3) * Float64(100) AS cr_dev, wr_items.wr_item_qty, CAST(wr_items.wr_item_qty AS Float64) / __common_expr_7 / Float64(3) * Float64(100) AS wr_dev, __common_expr_7 / Float64(3) AS average +03)----Projection: CAST(sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty AS Float64) AS __common_expr_7, sr_items.item_id, sr_items.sr_item_qty, cr_items.cr_item_qty, wr_items.wr_item_qty +04)------Inner Join: sr_items.item_id = wr_items.item_id +05)--------Projection: sr_items.item_id, sr_items.sr_item_qty, cr_items.cr_item_qty +06)----------Inner Join: sr_items.item_id = cr_items.item_id +07)------------SubqueryAlias: sr_items +08)--------------Projection: item.i_item_id AS item_id, sum(store_returns.sr_return_quantity) AS sr_item_qty +09)----------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_returns.sr_return_quantity)]] +10)------------------Projection: store_returns.sr_return_quantity, item.i_item_id +11)--------------------LeftSemi Join: date_dim.d_date = __correlated_sq_2.d_date +12)----------------------Projection: store_returns.sr_return_quantity, item.i_item_id, date_dim.d_date +13)------------------------Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk +14)--------------------------Projection: store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, item.i_item_id +15)----------------------------Inner Join: store_returns.sr_item_sk = item.i_item_sk +16)------------------------------TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_return_quantity] +17)------------------------------TableScan: item projection=[i_item_sk, i_item_id] +18)--------------------------TableScan: date_dim projection=[d_date_sk, d_date] +19)----------------------SubqueryAlias: __correlated_sq_2 +20)------------------------Projection: date_dim.d_date +21)--------------------------LeftSemi Join: date_dim.d_week_seq = __correlated_sq_1.d_week_seq +22)----------------------------TableScan: date_dim projection=[d_date, d_week_seq] +23)----------------------------SubqueryAlias: __correlated_sq_1 +24)------------------------------Projection: date_dim.d_week_seq +25)--------------------------------Filter: date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17") +26)----------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17")] +27)------------SubqueryAlias: cr_items +28)--------------Projection: item.i_item_id AS item_id, sum(catalog_returns.cr_return_quantity) AS cr_item_qty +29)----------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_returns.cr_return_quantity)]] +30)------------------Projection: catalog_returns.cr_return_quantity, item.i_item_id +31)--------------------LeftSemi Join: date_dim.d_date = __correlated_sq_4.d_date +32)----------------------Projection: catalog_returns.cr_return_quantity, item.i_item_id, date_dim.d_date +33)------------------------Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk +34)--------------------------Projection: catalog_returns.cr_returned_date_sk, catalog_returns.cr_return_quantity, item.i_item_id +35)----------------------------Inner Join: catalog_returns.cr_item_sk = item.i_item_sk +36)------------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_item_sk, cr_return_quantity] +37)------------------------------TableScan: item projection=[i_item_sk, i_item_id] +38)--------------------------TableScan: date_dim projection=[d_date_sk, d_date] +39)----------------------SubqueryAlias: __correlated_sq_4 +40)------------------------Projection: date_dim.d_date +41)--------------------------LeftSemi Join: date_dim.d_week_seq = __correlated_sq_3.d_week_seq +42)----------------------------TableScan: date_dim projection=[d_date, d_week_seq] +43)----------------------------SubqueryAlias: __correlated_sq_3 +44)------------------------------Projection: date_dim.d_week_seq +45)--------------------------------Filter: date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17") +46)----------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17")] +47)--------SubqueryAlias: wr_items +48)----------Projection: item.i_item_id AS item_id, sum(web_returns.wr_return_quantity) AS wr_item_qty +49)------------Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_returns.wr_return_quantity)]] +50)--------------Projection: web_returns.wr_return_quantity, item.i_item_id +51)----------------LeftSemi Join: date_dim.d_date = __correlated_sq_6.d_date +52)------------------Projection: web_returns.wr_return_quantity, item.i_item_id, date_dim.d_date +53)--------------------Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk +54)----------------------Projection: web_returns.wr_returned_date_sk, web_returns.wr_return_quantity, item.i_item_id +55)------------------------Inner Join: web_returns.wr_item_sk = item.i_item_sk +56)--------------------------TableScan: web_returns projection=[wr_returned_date_sk, wr_item_sk, wr_return_quantity] +57)--------------------------TableScan: item projection=[i_item_sk, i_item_id] +58)----------------------TableScan: date_dim projection=[d_date_sk, d_date] +59)------------------SubqueryAlias: __correlated_sq_6 +60)--------------------Projection: date_dim.d_date +61)----------------------LeftSemi Join: date_dim.d_week_seq = __correlated_sq_5.d_week_seq +62)------------------------TableScan: date_dim projection=[d_date, d_week_seq] +63)------------------------SubqueryAlias: __correlated_sq_5 +64)--------------------------Projection: date_dim.d_week_seq +65)----------------------------Filter: date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17") +66)------------------------------TableScan: date_dim projection=[d_date, d_week_seq], partial_filters=[date_dim.d_date = Date32("2000-06-30") OR date_dim.d_date = Date32("2000-09-27") OR date_dim.d_date = Date32("2000-11-17")] +physical_plan +01)SortPreservingMergeExec: [item_id@0 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[item_id@0 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[item_id@1 as item_id, sr_item_qty@2 as sr_item_qty, CAST(sr_item_qty@2 AS Float64) / __common_expr_7@0 / 3 * 100 as sr_dev, cr_item_qty@3 as cr_item_qty, CAST(cr_item_qty@3 AS Float64) / __common_expr_7@0 / 3 * 100 as cr_dev, wr_item_qty@4 as wr_item_qty, CAST(wr_item_qty@4 AS Float64) / __common_expr_7@0 / 3 * 100 as wr_dev, __common_expr_7@0 / 3 as average] +04)------ProjectionExec: expr=[CAST(sr_item_qty@0 + cr_item_qty@1 + wr_item_qty@2 AS Float64) as __common_expr_7, item_id@3 as item_id, sr_item_qty@0 as sr_item_qty, cr_item_qty@1 as cr_item_qty, wr_item_qty@2 as wr_item_qty] +05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_id@0, item_id@0)], projection=[sr_item_qty@3, cr_item_qty@4, wr_item_qty@1, item_id@2] +06)----------CoalescePartitionsExec +07)------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(web_returns.wr_return_quantity)@1 as wr_item_qty] +08)--------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_returns.wr_return_quantity)] +09)----------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +10)------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_returns.wr_return_quantity)] +11)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[wr_return_quantity@0, i_item_id@1] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_returned_date_sk@0, d_date_sk@0)], projection=[wr_return_quantity@1, i_item_id@2, d_date@4] +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, wr_item_sk@1)], projection=[wr_returned_date_sk@2, wr_return_quantity@4, i_item_id@1] +15)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_returned_date_sk, wr_item_sk, wr_return_quantity], file_type=vortex +17)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +18)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +19)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_week_seq@0, d_week_seq@1)], projection=[d_date@0] +20)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_date@2 = 2000-06-30 OR d_date@2 = 2000-09-27 OR d_date@2 = 2000-11-17 +21)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex +23)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(item_id@0, item_id@0)], projection=[item_id@2, sr_item_qty@3, cr_item_qty@1] +24)------------CoalescePartitionsExec +25)--------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(catalog_returns.cr_return_quantity)@1 as cr_item_qty] +26)----------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_returns.cr_return_quantity)] +27)------------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +28)--------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_returns.cr_return_quantity)] +29)----------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[cr_return_quantity@0, i_item_id@1] +30)------------------------CoalescePartitionsExec +31)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_returned_date_sk@0, d_date_sk@0)], projection=[cr_return_quantity@1, i_item_id@2, d_date@4] +32)----------------------------CoalescePartitionsExec +33)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, cr_item_sk@1)], projection=[cr_returned_date_sk@2, cr_return_quantity@4, i_item_id@1] +34)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +35)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +36)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_returned_date_sk, cr_item_sk, cr_return_quantity], file_type=vortex +37)----------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +38)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +39)------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_week_seq@0, d_week_seq@1)], projection=[d_date@0] +40)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_date@2 = 2000-06-30 OR d_date@2 = 2000-09-27 OR d_date@2 = 2000-11-17 +41)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +42)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex +43)------------ProjectionExec: expr=[i_item_id@0 as item_id, sum(store_returns.sr_return_quantity)@1 as sr_item_qty] +44)--------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_returns.sr_return_quantity)] +45)----------------RepartitionExec: partitioning=Hash([i_item_id@0], 4), input_partitions=4 +46)------------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_returns.sr_return_quantity)] +47)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[sr_return_quantity@0, i_item_id@1] +48)----------------------CoalescePartitionsExec +49)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sr_returned_date_sk@0, d_date_sk@0)], projection=[sr_return_quantity@1, i_item_id@2, d_date@4] +50)--------------------------CoalescePartitionsExec +51)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, sr_item_sk@1)], projection=[sr_returned_date_sk@2, sr_return_quantity@4, i_item_id@1] +52)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex +53)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_returned_date_sk, sr_item_sk, sr_return_quantity], file_type=vortex +54)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +55)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex +56)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_week_seq@0, d_week_seq@1)], projection=[d_date@0] +57)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_week_seq], file_type=vortex, predicate: d_date@2 = 2000-06-30 OR d_date@2 = 2000-09-27 OR d_date@2 = 2000-11-17 +58)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +59)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no new file mode 100644 index 00000000000..7ffc1e4be40 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT c_customer_id AS customer_id , + concat(concat(coalesce(c_last_name, '') , ', '), coalesce(c_first_name, '')) AS customername +FROM customer , + customer_address , + customer_demographics , + household_demographics , + income_band , + store_returns +WHERE ca_city = 'Edgewood' + AND c_current_addr_sk = ca_address_sk + AND ib_lower_bound >= 38128 + AND ib_upper_bound <= 38128 + 50000 + AND ib_income_band_sk = hd_income_band_sk + AND cd_demo_sk = c_current_cdemo_sk + AND hd_demo_sk = c_current_hdemo_sk + AND sr_cdemo_sk = cd_demo_sk +ORDER BY c_customer_id NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: customer_id ASC NULLS FIRST, fetch=100 +02)--Projection: customer.c_customer_id AS customer_id, concat(concat(CASE WHEN customer.c_last_name IS NOT NULL THEN customer.c_last_name ELSE Utf8View("") END, Utf8View(", ")), CASE WHEN customer.c_first_name IS NOT NULL THEN customer.c_first_name ELSE Utf8View("") END) AS customername +03)----Inner Join: customer_demographics.cd_demo_sk = store_returns.sr_cdemo_sk +04)------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk +05)--------Inner Join: household_demographics.hd_income_band_sk = income_band.ib_income_band_sk +06)----------Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk, household_demographics.hd_income_band_sk +07)------------Inner Join: customer.c_current_hdemo_sk = household_demographics.hd_demo_sk +08)--------------Projection: customer.c_customer_id, customer.c_current_hdemo_sk, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk +09)----------------Inner Join: customer.c_current_cdemo_sk = customer_demographics.cd_demo_sk +10)------------------Projection: customer.c_customer_id, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_first_name, customer.c_last_name +11)--------------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +12)----------------------TableScan: customer projection=[c_customer_id, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_name, c_last_name] +13)----------------------Projection: customer_address.ca_address_sk +14)------------------------Filter: customer_address.ca_city = Utf8View("Edgewood") +15)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_city], partial_filters=[customer_address.ca_city = Utf8View("Edgewood")] +16)------------------TableScan: customer_demographics projection=[cd_demo_sk] +17)--------------TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] +18)----------Projection: income_band.ib_income_band_sk +19)------------Filter: income_band.ib_lower_bound >= Int64(38128) AND income_band.ib_upper_bound <= Int32(88128) +20)--------------TableScan: income_band projection=[ib_income_band_sk, ib_lower_bound, ib_upper_bound], partial_filters=[income_band.ib_lower_bound >= Int64(38128), income_band.ib_upper_bound <= Int32(88128)] +21)------TableScan: store_returns projection=[sr_cdemo_sk] +physical_plan +01)SortPreservingMergeExec: [customer_id@0 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[customer_id@0 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[c_customer_id@0 as customer_id, concat(concat(CASE WHEN c_last_name@1 IS NOT NULL THEN c_last_name@1 ELSE END, , ), CASE WHEN c_first_name@2 IS NOT NULL THEN c_first_name@2 ELSE END) as customername] +04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@3, sr_cdemo_sk@0)], projection=[c_customer_id@0, c_last_name@2, c_first_name@1] +05)--------CoalescePartitionsExec +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ib_income_band_sk@0, hd_income_band_sk@4)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, cd_demo_sk@4] +07)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/income_band.vortex]]}, projection=[ib_income_band_sk], file_type=vortex, predicate: ib_lower_bound@1 >= 38128 AND ib_upper_bound@2 <= 88128 +08)------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_hdemo_sk@1, hd_demo_sk@0)], projection=[c_customer_id@0, c_first_name@2, c_last_name@3, cd_demo_sk@4, hd_income_band_sk@6] +10)----------------CoalescePartitionsExec +11)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_id@0, c_current_hdemo_sk@2, c_first_name@3, c_last_name@4, cd_demo_sk@5] +12)--------------------CoalescePartitionsExec +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@3)], projection=[c_customer_id@1, c_current_cdemo_sk@2, c_current_hdemo_sk@3, c_first_name@5, c_last_name@6] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_city@6 = Edgewood +15)------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +16)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_id, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_name, c_last_name], file_type=vortex +17)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +18)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex +19)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex +20)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_cdemo_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no new file mode 100644 index 00000000000..09892312095 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no @@ -0,0 +1,121 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT SUBSTRING(r_reason_desc,1,20) , + avg(ws_quantity) avg1, + avg(wr_refunded_cash) avg2, + avg(wr_fee) +FROM web_sales, + web_returns, + web_page, + customer_demographics cd1, + customer_demographics cd2, + customer_address, + date_dim, + reason +WHERE ws_web_page_sk = wp_web_page_sk + AND ws_item_sk = wr_item_sk + AND ws_order_number = wr_order_number + AND ws_sold_date_sk = d_date_sk + AND d_year = 2000 + AND cd1.cd_demo_sk = wr_refunded_cdemo_sk + AND cd2.cd_demo_sk = wr_returning_cdemo_sk + AND ca_address_sk = wr_refunded_addr_sk + AND r_reason_sk = wr_reason_sk + AND ( ( cd1.cd_marital_status = 'M' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = 'Advanced Degree' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 100.00 AND 150.00 ) + OR ( cd1.cd_marital_status = 'S' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = 'College' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 50.00 AND 100.00 ) + OR ( cd1.cd_marital_status = 'W' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = '2 yr Degree' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 150.00 AND 200.00 ) ) + AND ( ( ca_country = 'United States' + AND ca_state IN ('IN', + 'OH', + 'NJ') + AND ws_net_profit BETWEEN 100 AND 200) + OR ( ca_country = 'United States' + AND ca_state IN ('WI', + 'CT', + 'KY') + AND ws_net_profit BETWEEN 150 AND 300) + OR ( ca_country = 'United States' + AND ca_state IN ('LA', + 'IA', + 'AR') + AND ws_net_profit BETWEEN 50 AND 250) ) +GROUP BY r_reason_desc +ORDER BY SUBSTRING(r_reason_desc,1,20) , + avg(ws_quantity) , + avg(wr_refunded_cash) , + avg(wr_fee) +LIMIT 100; +---- +logical_plan +01)Sort: substr(reason.r_reason_desc,Int64(1),Int64(20)) ASC NULLS LAST, avg1 ASC NULLS LAST, avg2 ASC NULLS LAST, avg(web_returns.wr_fee) ASC NULLS LAST, fetch=100 +02)--Projection: substr(reason.r_reason_desc, Int64(1), Int64(20)), avg(web_sales.ws_quantity) AS avg1, avg(web_returns.wr_refunded_cash) AS avg2, avg(web_returns.wr_fee) +03)----Aggregate: groupBy=[[reason.r_reason_desc]], aggr=[[avg(CAST(web_sales.ws_quantity AS Float64)), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)]] +04)------Projection: web_sales.ws_quantity, web_returns.wr_fee, web_returns.wr_refunded_cash, reason.r_reason_desc +05)--------Inner Join: web_returns.wr_reason_sk = reason.r_reason_sk +06)----------Projection: web_sales.ws_quantity, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash +07)------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +08)--------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash +09)----------------Inner Join: web_returns.wr_refunded_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = Utf8View("IN") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("NJ")) AND web_sales.ws_net_profit >= Decimal128(100.00,7,2) AND web_sales.ws_net_profit <= Decimal128(200.00,7,2) OR (customer_address.ca_state = Utf8View("WI") OR customer_address.ca_state = Utf8View("CT") OR customer_address.ca_state = Utf8View("KY")) AND web_sales.ws_net_profit >= Decimal128(150.00,7,2) AND web_sales.ws_net_profit <= Decimal128(300.00,7,2) OR (customer_address.ca_state = Utf8View("LA") OR customer_address.ca_state = Utf8View("IA") OR customer_address.ca_state = Utf8View("AR")) AND web_sales.ws_net_profit >= Decimal128(50.00,7,2) AND web_sales.ws_net_profit <= Decimal128(250.00,7,2) +10)------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_net_profit, web_returns.wr_refunded_addr_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash +11)--------------------Inner Join: web_returns.wr_returning_cdemo_sk = cd2.cd_demo_sk, cd1.cd_marital_status = cd2.cd_marital_status, cd1.cd_education_status = cd2.cd_education_status +12)----------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_net_profit, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash, cd1.cd_marital_status, cd1.cd_education_status +13)------------------------Inner Join: web_returns.wr_refunded_cdemo_sk = cd1.cd_demo_sk Filter: cd1.cd_marital_status = Utf8View("M") AND cd1.cd_education_status = Utf8View("Advanced Degree") AND web_sales.ws_sales_price >= Decimal128(100.00,7,2) AND web_sales.ws_sales_price <= Decimal128(150.00,7,2) OR cd1.cd_marital_status = Utf8View("S") AND cd1.cd_education_status = Utf8View("College") AND web_sales.ws_sales_price >= Decimal128(50.00,7,2) AND web_sales.ws_sales_price <= Decimal128(100.00,7,2) OR cd1.cd_marital_status = Utf8View("W") AND cd1.cd_education_status = Utf8View("2 yr Degree") AND web_sales.ws_sales_price >= Decimal128(150.00,7,2) AND web_sales.ws_sales_price <= Decimal128(200.00,7,2) +14)--------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_sales_price, web_sales.ws_net_profit, web_returns.wr_refunded_cdemo_sk, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash +15)----------------------------Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk +16)------------------------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_web_page_sk, web_sales.ws_quantity, web_sales.ws_sales_price, web_sales.ws_net_profit, web_returns.wr_refunded_cdemo_sk, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash +17)--------------------------------Inner Join: web_sales.ws_item_sk = web_returns.wr_item_sk, web_sales.ws_order_number = web_returns.wr_order_number +18)----------------------------------Filter: (web_sales.ws_net_profit >= Decimal128(100.00,7,2) AND web_sales.ws_net_profit <= Decimal128(200.00,7,2) OR web_sales.ws_net_profit >= Decimal128(150.00,7,2) AND web_sales.ws_net_profit <= Decimal128(300.00,7,2) OR web_sales.ws_net_profit >= Decimal128(50.00,7,2) AND web_sales.ws_net_profit <= Decimal128(250.00,7,2)) AND (web_sales.ws_sales_price >= Decimal128(100.00,7,2) AND web_sales.ws_sales_price <= Decimal128(150.00,7,2) OR web_sales.ws_sales_price >= Decimal128(50.00,7,2) AND web_sales.ws_sales_price <= Decimal128(100.00,7,2) OR web_sales.ws_sales_price >= Decimal128(150.00,7,2) AND web_sales.ws_sales_price <= Decimal128(200.00,7,2)) +19)------------------------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_web_page_sk, ws_order_number, ws_quantity, ws_sales_price, ws_net_profit], partial_filters=[web_sales.ws_net_profit >= Decimal128(100.00,7,2) AND web_sales.ws_net_profit <= Decimal128(200.00,7,2) OR web_sales.ws_net_profit >= Decimal128(150.00,7,2) AND web_sales.ws_net_profit <= Decimal128(300.00,7,2) OR web_sales.ws_net_profit >= Decimal128(50.00,7,2) AND web_sales.ws_net_profit <= Decimal128(250.00,7,2), web_sales.ws_sales_price >= Decimal128(100.00,7,2) AND web_sales.ws_sales_price <= Decimal128(150.00,7,2) OR web_sales.ws_sales_price >= Decimal128(50.00,7,2) AND web_sales.ws_sales_price <= Decimal128(100.00,7,2) OR web_sales.ws_sales_price >= Decimal128(150.00,7,2) AND web_sales.ws_sales_price <= Decimal128(200.00,7,2)] +20)----------------------------------TableScan: web_returns projection=[wr_item_sk, wr_refunded_cdemo_sk, wr_refunded_addr_sk, wr_returning_cdemo_sk, wr_reason_sk, wr_order_number, wr_fee, wr_refunded_cash] +21)------------------------------TableScan: web_page projection=[wp_web_page_sk] +22)--------------------------SubqueryAlias: cd1 +23)----------------------------Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree") +24)------------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") OR customer_demographics.cd_marital_status = Utf8View("S") AND customer_demographics.cd_education_status = Utf8View("College") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("2 yr Degree")] +25)----------------------SubqueryAlias: cd2 +26)------------------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status] +27)------------------Projection: customer_address.ca_address_sk, customer_address.ca_state +28)--------------------Filter: customer_address.ca_country = Utf8View("United States") AND customer_address.ca_state IN ([Utf8View("IN"), Utf8View("OH"), Utf8View("NJ"), Utf8View("WI"), Utf8View("CT"), Utf8View("KY"), Utf8View("LA"), Utf8View("IA"), Utf8View("AR")]) AND (customer_address.ca_state = Utf8View("IN") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("NJ") OR customer_address.ca_state = Utf8View("WI") OR customer_address.ca_state = Utf8View("CT") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("LA") OR customer_address.ca_state = Utf8View("IA") OR customer_address.ca_state = Utf8View("AR")) +29)----------------------TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], partial_filters=[customer_address.ca_country = Utf8View("United States"), customer_address.ca_state IN ([Utf8View("IN"), Utf8View("OH"), Utf8View("NJ"), Utf8View("WI"), Utf8View("CT"), Utf8View("KY"), Utf8View("LA"), Utf8View("IA"), Utf8View("AR")]), customer_address.ca_state = Utf8View("IN") OR customer_address.ca_state = Utf8View("OH") OR customer_address.ca_state = Utf8View("NJ") OR customer_address.ca_state = Utf8View("WI") OR customer_address.ca_state = Utf8View("CT") OR customer_address.ca_state = Utf8View("KY") OR customer_address.ca_state = Utf8View("LA") OR customer_address.ca_state = Utf8View("IA") OR customer_address.ca_state = Utf8View("AR")] +30)--------------Projection: date_dim.d_date_sk +31)----------------Filter: date_dim.d_year = Int64(2000) +32)------------------TableScan: date_dim projection=[d_date_sk, d_year], partial_filters=[date_dim.d_year = Int64(2000)] +33)----------TableScan: reason projection=[r_reason_sk, r_reason_desc] +physical_plan +01)SortPreservingMergeExec: [substr(reason.r_reason_desc,Int64(1),Int64(20))@0 ASC NULLS LAST, avg1@1 ASC NULLS LAST, avg2@2 ASC NULLS LAST, avg(web_returns.wr_fee)@3 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[substr(reason.r_reason_desc,Int64(1),Int64(20))@0 ASC NULLS LAST, avg1@1 ASC NULLS LAST, avg2@2 ASC NULLS LAST, avg(web_returns.wr_fee)@3 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[substr(r_reason_desc@0, 1, 20) as substr(reason.r_reason_desc,Int64(1),Int64(20)), avg(web_sales.ws_quantity)@1 as avg1, avg(web_returns.wr_refunded_cash)@2 as avg2, avg(web_returns.wr_fee)@3 as avg(web_returns.wr_fee)] +04)------AggregateExec: mode=FinalPartitioned, gby=[r_reason_desc@0 as r_reason_desc], aggr=[avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)] +05)--------RepartitionExec: partitioning=Hash([r_reason_desc@0], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[r_reason_desc@3 as r_reason_desc], aggr=[avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_reason_sk@0, wr_reason_sk@1)], projection=[ws_quantity@2, wr_fee@4, wr_refunded_cash@5, r_reason_desc@1] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/reason.vortex]]}, projection=[r_reason_sk, r_reason_desc], file_type=vortex +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_quantity@2, wr_reason_sk@3, wr_fee@4, wr_refunded_cash@5] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_year@6 = 2000 +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, wr_refunded_addr_sk@3)], filter=(ca_state@1 = IN OR ca_state@1 = OH OR ca_state@1 = NJ) AND ws_net_profit@0 >= 100.00 AND ws_net_profit@0 <= 200.00 OR (ca_state@1 = WI OR ca_state@1 = CT OR ca_state@1 = KY) AND ws_net_profit@0 >= 150.00 AND ws_net_profit@0 <= 300.00 OR (ca_state@1 = LA OR ca_state@1 = IA OR ca_state@1 = AR) AND ws_net_profit@0 >= 50.00 AND ws_net_profit@0 <= 250.00, projection=[ws_sold_date_sk@2, ws_quantity@3, wr_reason_sk@6, wr_fee@7, wr_refunded_cash@8] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, predicate: ca_country@10 = United States AND ca_state@8 IN (SET) ([IN, OH, NJ, WI, CT, KY, LA, IA, AR]) AND (ca_state@8 = IN OR ca_state@8 = OH OR ca_state@8 = NJ OR ca_state@8 = WI OR ca_state@8 = CT OR ca_state@8 = KY OR ca_state@8 = LA OR ca_state@8 = IA OR ca_state@8 = AR) +13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_returning_cdemo_sk@4, cd_demo_sk@0), (cd_marital_status@8, cd_marital_status@1), (cd_education_status@9, cd_education_status@2)], projection=[ws_sold_date_sk@0, ws_quantity@1, ws_net_profit@2, wr_refunded_addr_sk@3, wr_reason_sk@5, wr_fee@6, wr_refunded_cash@7] +14)--------------------CoalescePartitionsExec +15)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cd_demo_sk@0, wr_refunded_cdemo_sk@4)], filter=cd_marital_status@1 = M AND cd_education_status@2 = Advanced Degree AND ws_sales_price@0 >= 100.00 AND ws_sales_price@0 <= 150.00 OR cd_marital_status@1 = S AND cd_education_status@2 = College AND ws_sales_price@0 >= 50.00 AND ws_sales_price@0 <= 100.00 OR cd_marital_status@1 = W AND cd_education_status@2 = 2 yr Degree AND ws_sales_price@0 >= 150.00 AND ws_sales_price@0 <= 200.00, projection=[ws_sold_date_sk@3, ws_quantity@4, ws_net_profit@6, wr_refunded_addr_sk@8, wr_returning_cdemo_sk@9, wr_reason_sk@10, wr_fee@11, wr_refunded_cash@12, cd_marital_status@1, cd_education_status@2] +16)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex, predicate: cd_marital_status@2 = M AND cd_education_status@3 = Advanced Degree OR cd_marital_status@2 = S AND cd_education_status@3 = College OR cd_marital_status@2 = W AND cd_education_status@3 = 2 yr Degree +17)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wp_web_page_sk@0, ws_web_page_sk@1)], projection=[ws_sold_date_sk@1, ws_quantity@3, ws_sales_price@4, ws_net_profit@5, wr_refunded_cdemo_sk@6, wr_refunded_addr_sk@7, wr_returning_cdemo_sk@8, wr_reason_sk@9, wr_fee@10, wr_refunded_cash@11] +18)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_page.vortex]]}, projection=[wp_web_page_sk], file_type=vortex +19)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wr_item_sk@0, ws_item_sk@1), (wr_order_number@5, ws_order_number@3)], projection=[ws_sold_date_sk@8, ws_web_page_sk@10, ws_quantity@12, ws_sales_price@13, ws_net_profit@14, wr_refunded_cdemo_sk@1, wr_refunded_addr_sk@2, wr_returning_cdemo_sk@3, wr_reason_sk@4, wr_fee@6, wr_refunded_cash@7] +20)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_item_sk, wr_refunded_cdemo_sk, wr_refunded_addr_sk, wr_returning_cdemo_sk, wr_reason_sk, wr_order_number, wr_fee, wr_refunded_cash], file_type=vortex +21)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_web_page_sk, ws_order_number, ws_quantity, ws_sales_price, ws_net_profit], file_type=vortex, predicate: (ws_net_profit@33 >= 100.00 AND ws_net_profit@33 <= 200.00 OR ws_net_profit@33 >= 150.00 AND ws_net_profit@33 <= 300.00 OR ws_net_profit@33 >= 50.00 AND ws_net_profit@33 <= 250.00) AND (ws_sales_price@21 >= 100.00 AND ws_sales_price@21 <= 150.00 OR ws_sales_price@21 >= 50.00 AND ws_sales_price@21 <= 100.00 OR ws_sales_price@21 >= 150.00 AND ws_sales_price@21 <= 200.00) +22)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +23)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q86.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q86.slt.no new file mode 100644 index 00000000000..0df431330ad --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q86.slt.no @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT sum(ws_net_paid) AS total_sum , + i_category , + i_class , + grouping(i_category)+grouping(i_class) AS lochierarchy , + rank() OVER ( PARTITION BY grouping(i_category)+grouping(i_class), + CASE + WHEN grouping(i_class) = 0 THEN i_category + END + ORDER BY sum(ws_net_paid) DESC) AS rank_within_parent +FROM web_sales , + date_dim d1 , + item +WHERE d1.d_month_seq BETWEEN 1200 AND 1200+11 + AND d1.d_date_sk = ws_sold_date_sk + AND i_item_sk = ws_item_sk +GROUP BY rollup(i_category,i_class) +ORDER BY lochierarchy DESC NULLS FIRST, + CASE + WHEN grouping(i_category)+grouping(i_class) = 0 THEN i_category + END NULLS FIRST, + rank_within_parent NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: lochierarchy DESC NULLS FIRST, CASE WHEN lochierarchy = Int32(0) THEN item.i_category END AS CASE WHEN lochierarchy = Int64(0) THEN item.i_category END ASC NULLS FIRST, rank_within_parent ASC NULLS FIRST, fetch=100 +02)--Projection: sum(web_sales.ws_net_paid) AS total_sum, item.i_category, item.i_class, grouping(item.i_category) + grouping(item.i_class) AS lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent +03)----WindowAggr: windowExpr=[[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int32(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] +04)------Projection: item.i_category, item.i_class, sum(web_sales.ws_net_paid), CAST(__grouping_id & UInt8(2) >> UInt8(1) AS Int32) AS grouping(item.i_category), CAST(__grouping_id & UInt8(1) AS Int32) AS grouping(item.i_class) +05)--------Aggregate: groupBy=[[ROLLUP (item.i_category, item.i_class)]], aggr=[[sum(web_sales.ws_net_paid)]] +06)----------Projection: web_sales.ws_net_paid, item.i_class, item.i_category +07)------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +08)--------------Projection: web_sales.ws_item_sk, web_sales.ws_net_paid +09)----------------Inner Join: web_sales.ws_sold_date_sk = d1.d_date_sk +10)------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_net_paid] +11)------------------SubqueryAlias: d1 +12)--------------------Projection: date_dim.d_date_sk +13)----------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +14)------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +15)--------------TableScan: item projection=[i_item_sk, i_class, i_category] +physical_plan +01)SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC, rank_within_parent@4 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC, rank_within_parent@4 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[sum(web_sales.ws_net_paid)@2 as total_sum, i_category@0 as i_category, i_class@1 as i_class, grouping(item.i_category)@3 + grouping(item.i_class)@4 as lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as rank_within_parent] +04)------BoundedWindowAggExec: wdw=[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Field { "rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW": UInt64 }, frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW], mode=[Sorted] +05)--------SortExec: expr=[grouping(item.i_category)@3 + grouping(item.i_class)@4 ASC NULLS LAST, CASE WHEN grouping(item.i_class)@4 = 0 THEN i_category@0 END ASC NULLS LAST, sum(web_sales.ws_net_paid)@2 DESC], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([grouping(item.i_category)@3 + grouping(item.i_class)@4, CASE WHEN grouping(item.i_class)@4 = 0 THEN i_category@0 END], 4), input_partitions=4 +07)------------ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, sum(web_sales.ws_net_paid)@3 as sum(web_sales.ws_net_paid), CAST(__grouping_id@2 & 2 >> 1 AS Int32) as grouping(item.i_category), CAST(__grouping_id@2 & 1 AS Int32) as grouping(item.i_class)] +08)--------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, __grouping_id@2 as __grouping_id], aggr=[sum(web_sales.ws_net_paid)] +09)----------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1, __grouping_id@2], 4), input_partitions=4 +10)------------------AggregateExec: mode=Partial, gby=[(NULL as i_category, NULL as i_class), (i_category@2 as i_category, NULL as i_class), (i_category@2 as i_category, i_class@1 as i_class)], aggr=[sum(web_sales.ws_net_paid)] +11)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@0)], projection=[ws_net_paid@4, i_class@1, i_category@2] +12)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_class, i_category], file_type=vortex +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_net_paid@3] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +15)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_net_paid], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no new file mode 100644 index 00000000000..939be33ba5c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no @@ -0,0 +1,108 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT count(*) +FROM ((SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM store_sales, + date_dim, + customer + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11) + EXCEPT + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM catalog_sales, + date_dim, + customer + WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11) + EXCEPT + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM web_sales, + date_dim, + customer + WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk + AND web_sales.ws_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11)) cool_cust ; +---- +logical_plan +01)Projection: count(Int64(1)) AS count(*) +02)--Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +03)----SubqueryAlias: cool_cust +04)------Projection: +05)--------LeftAnti Join: left.c_last_name = customer.c_last_name, left.c_first_name = customer.c_first_name, left.d_date = date_dim.d_date +06)----------LeftAnti Join: left.c_last_name = right.c_last_name, left.c_first_name = right.c_first_name, left.d_date = right.d_date +07)------------SubqueryAlias: left +08)--------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +09)----------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +10)------------------Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk +11)--------------------Projection: store_sales.ss_customer_sk, date_dim.d_date +12)----------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +13)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] +14)------------------------Projection: date_dim.d_date_sk, date_dim.d_date +15)--------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +16)----------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +17)--------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +18)------------SubqueryAlias: right +19)--------------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +20)----------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +21)------------------Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk +22)--------------------Projection: catalog_sales.cs_bill_customer_sk, date_dim.d_date +23)----------------------Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +24)------------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk] +25)------------------------Projection: date_dim.d_date_sk, date_dim.d_date +26)--------------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +27)----------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +28)--------------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +29)----------Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] +30)------------Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date +31)--------------Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk +32)----------------Projection: web_sales.ws_bill_customer_sk, date_dim.d_date +33)------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +34)--------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] +35)--------------------Projection: date_dim.d_date_sk, date_dim.d_date +36)----------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +37)------------------------TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +38)----------------TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] +physical_plan +01)ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +02)--AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +03)----CoalescePartitionsExec +04)------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +05)--------HashJoinExec: mode=CollectLeft, join_type=RightAnti, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)], projection=[], NullsEqual: true +06)----------CoalescePartitionsExec +07)------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +08)--------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_bill_customer_sk@3, d_date@1] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +14)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_bill_customer_sk], file_type=vortex +15)----------HashJoinExec: mode=CollectLeft, join_type=RightAnti, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)], NullsEqual: true +16)------------CoalescePartitionsExec +17)--------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +18)----------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +19)------------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +20)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +21)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +22)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_customer_sk@3, d_date@1] +23)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +24)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk], file_type=vortex +25)------------AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +26)--------------RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 4), input_partitions=4 +27)----------------AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] +28)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@0)], projection=[c_last_name@2, c_first_name@1, d_date@4] +29)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_first_name, c_last_name], file_type=vortex +30)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_customer_sk@3, d_date@1] +31)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +32)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no new file mode 100644 index 00000000000..fcd749f1581 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no @@ -0,0 +1,406 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * +FROM + (SELECT count(*) h8_30_to_9 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 8 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s1, + (SELECT count(*) h9_to_9_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 9 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s2, + (SELECT count(*) h9_30_to_10 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 9 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s3, + (SELECT count(*) h10_to_10_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 10 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s4, + (SELECT count(*) h10_30_to_11 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 10 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s5, + (SELECT count(*) h11_to_11_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 11 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s6, + (SELECT count(*) h11_30_to_12 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 11 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s7, + (SELECT count(*) h12_to_12_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 12 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s8 ; +---- +logical_plan +01)Cross Join: +02)--Cross Join: +03)----Cross Join: +04)------Cross Join: +05)--------Cross Join: +06)----------Cross Join: +07)------------Cross Join: +08)--------------SubqueryAlias: s1 +09)----------------Projection: count(Int64(1)) AS count(*) AS h8_30_to_9 +10)------------------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +11)--------------------Projection: +12)----------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +13)------------------------Projection: store_sales.ss_store_sk +14)--------------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +15)----------------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +16)------------------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +17)--------------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +18)--------------------------------Projection: household_demographics.hd_demo_sk +19)----------------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +20)------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +21)----------------------------Projection: time_dim.t_time_sk +22)------------------------------Filter: time_dim.t_hour = Int64(8) AND time_dim.t_minute >= Int64(30) +23)--------------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(8), time_dim.t_minute >= Int64(30)] +24)------------------------Projection: store.s_store_sk +25)--------------------------Filter: store.s_store_name = Utf8View("ese") +26)----------------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +27)--------------SubqueryAlias: s2 +28)----------------Projection: count(Int64(1)) AS count(*) AS h9_to_9_30 +29)------------------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +30)--------------------Projection: +31)----------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +32)------------------------Projection: store_sales.ss_store_sk +33)--------------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +34)----------------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +35)------------------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +36)--------------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +37)--------------------------------Projection: household_demographics.hd_demo_sk +38)----------------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +39)------------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +40)----------------------------Projection: time_dim.t_time_sk +41)------------------------------Filter: time_dim.t_hour = Int64(9) AND time_dim.t_minute < Int64(30) +42)--------------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(9), time_dim.t_minute < Int64(30)] +43)------------------------Projection: store.s_store_sk +44)--------------------------Filter: store.s_store_name = Utf8View("ese") +45)----------------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +46)------------SubqueryAlias: s3 +47)--------------Projection: count(Int64(1)) AS count(*) AS h9_30_to_10 +48)----------------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +49)------------------Projection: +50)--------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +51)----------------------Projection: store_sales.ss_store_sk +52)------------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +53)--------------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +54)----------------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +55)------------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +56)------------------------------Projection: household_demographics.hd_demo_sk +57)--------------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +58)----------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +59)--------------------------Projection: time_dim.t_time_sk +60)----------------------------Filter: time_dim.t_hour = Int64(9) AND time_dim.t_minute >= Int64(30) +61)------------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(9), time_dim.t_minute >= Int64(30)] +62)----------------------Projection: store.s_store_sk +63)------------------------Filter: store.s_store_name = Utf8View("ese") +64)--------------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +65)----------SubqueryAlias: s4 +66)------------Projection: count(Int64(1)) AS count(*) AS h10_to_10_30 +67)--------------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +68)----------------Projection: +69)------------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +70)--------------------Projection: store_sales.ss_store_sk +71)----------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +72)------------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +73)--------------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +74)----------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +75)----------------------------Projection: household_demographics.hd_demo_sk +76)------------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +77)--------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +78)------------------------Projection: time_dim.t_time_sk +79)--------------------------Filter: time_dim.t_hour = Int64(10) AND time_dim.t_minute < Int64(30) +80)----------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(10), time_dim.t_minute < Int64(30)] +81)--------------------Projection: store.s_store_sk +82)----------------------Filter: store.s_store_name = Utf8View("ese") +83)------------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +84)--------SubqueryAlias: s5 +85)----------Projection: count(Int64(1)) AS count(*) AS h10_30_to_11 +86)------------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +87)--------------Projection: +88)----------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +89)------------------Projection: store_sales.ss_store_sk +90)--------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +91)----------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +92)------------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +93)--------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +94)--------------------------Projection: household_demographics.hd_demo_sk +95)----------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +96)------------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +97)----------------------Projection: time_dim.t_time_sk +98)------------------------Filter: time_dim.t_hour = Int64(10) AND time_dim.t_minute >= Int64(30) +99)--------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(10), time_dim.t_minute >= Int64(30)] +100)------------------Projection: store.s_store_sk +101)--------------------Filter: store.s_store_name = Utf8View("ese") +102)----------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +103)------SubqueryAlias: s6 +104)--------Projection: count(Int64(1)) AS count(*) AS h11_to_11_30 +105)----------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +106)------------Projection: +107)--------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +108)----------------Projection: store_sales.ss_store_sk +109)------------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +110)--------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +111)----------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +112)------------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +113)------------------------Projection: household_demographics.hd_demo_sk +114)--------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +115)----------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +116)--------------------Projection: time_dim.t_time_sk +117)----------------------Filter: time_dim.t_hour = Int64(11) AND time_dim.t_minute < Int64(30) +118)------------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(11), time_dim.t_minute < Int64(30)] +119)----------------Projection: store.s_store_sk +120)------------------Filter: store.s_store_name = Utf8View("ese") +121)--------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +122)----SubqueryAlias: s7 +123)------Projection: count(Int64(1)) AS count(*) AS h11_30_to_12 +124)--------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +125)----------Projection: +126)------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +127)--------------Projection: store_sales.ss_store_sk +128)----------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +129)------------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +130)--------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +131)----------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +132)----------------------Projection: household_demographics.hd_demo_sk +133)------------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +134)--------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +135)------------------Projection: time_dim.t_time_sk +136)--------------------Filter: time_dim.t_hour = Int64(11) AND time_dim.t_minute >= Int64(30) +137)----------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(11), time_dim.t_minute >= Int64(30)] +138)--------------Projection: store.s_store_sk +139)----------------Filter: store.s_store_name = Utf8View("ese") +140)------------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +141)--SubqueryAlias: s8 +142)----Projection: count(Int64(1)) AS count(*) AS h12_to_12_30 +143)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +144)--------Projection: +145)----------Inner Join: store_sales.ss_store_sk = store.s_store_sk +146)------------Projection: store_sales.ss_store_sk +147)--------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +148)----------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +149)------------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +150)--------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +151)--------------------Projection: household_demographics.hd_demo_sk +152)----------------------Filter: household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2) +153)------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], partial_filters=[household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int32(6) OR household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int64(0) AND household_demographics.hd_vehicle_count <= Int32(2)] +154)----------------Projection: time_dim.t_time_sk +155)------------------Filter: time_dim.t_hour = Int64(12) AND time_dim.t_minute < Int64(30) +156)--------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(12), time_dim.t_minute < Int64(30)] +157)------------Projection: store.s_store_sk +158)--------------Filter: store.s_store_name = Utf8View("ese") +159)----------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +physical_plan +01)ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@6 as h11_to_11_30, h11_30_to_12@7 as h11_30_to_12, h12_to_12_30@0 as h12_to_12_30] +02)--CrossJoinExec +03)----ProjectionExec: expr=[count(Int64(1))@0 as h12_to_12_30] +04)------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +05)--------CoalescePartitionsExec +06)----------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 12 AND t_minute@4 < 30 +11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +13)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +14)----ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@6 as h11_to_11_30, h11_30_to_12@0 as h11_30_to_12] +15)------CrossJoinExec +16)--------ProjectionExec: expr=[count(Int64(1))@0 as h11_30_to_12] +17)----------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +18)------------CoalescePartitionsExec +19)--------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +20)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +21)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +22)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +23)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 11 AND t_minute@4 >= 30 +24)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +25)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +26)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +27)--------ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@0 as h11_to_11_30] +28)----------CrossJoinExec +29)------------ProjectionExec: expr=[count(Int64(1))@0 as h11_to_11_30] +30)--------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +31)----------------CoalescePartitionsExec +32)------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +33)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +34)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +35)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +36)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 11 AND t_minute@4 < 30 +37)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +38)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +39)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +40)------------ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@0 as h10_30_to_11] +41)--------------CrossJoinExec +42)----------------ProjectionExec: expr=[count(Int64(1))@0 as h10_30_to_11] +43)------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +44)--------------------CoalescePartitionsExec +45)----------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +46)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +47)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +48)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +49)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 10 AND t_minute@4 >= 30 +50)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +51)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +52)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +53)----------------ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@0 as h10_to_10_30] +54)------------------CrossJoinExec +55)--------------------ProjectionExec: expr=[count(Int64(1))@0 as h10_to_10_30] +56)----------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +57)------------------------CoalescePartitionsExec +58)--------------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +59)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +60)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +61)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +62)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 10 AND t_minute@4 < 30 +63)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +64)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +65)----------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +66)--------------------ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@0 as h9_30_to_10] +67)----------------------CrossJoinExec +68)------------------------ProjectionExec: expr=[count(Int64(1))@0 as h9_30_to_10] +69)--------------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +70)----------------------------CoalescePartitionsExec +71)------------------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +72)--------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +73)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +74)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +75)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 9 AND t_minute@4 >= 30 +76)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +77)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +78)--------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +79)------------------------CrossJoinExec +80)--------------------------ProjectionExec: expr=[count(Int64(1))@0 as h8_30_to_9] +81)----------------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +82)------------------------------CoalescePartitionsExec +83)--------------------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +84)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +85)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +86)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +87)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 8 AND t_minute@4 >= 30 +88)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +89)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +90)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex +91)--------------------------ProjectionExec: expr=[count(Int64(1))@0 as h9_to_9_30] +92)----------------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +93)------------------------------CoalescePartitionsExec +94)--------------------------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +95)----------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +96)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +97)------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +98)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 9 AND t_minute@4 < 30 +99)--------------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +100)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6 OR hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 0 AND hd_vehicle_count@4 <= 2 +101)----------------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q89.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q89.slt.no new file mode 100644 index 00000000000..297f786786e --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q89.slt.no @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT * from + (SELECT i_category, i_class, i_brand, s_store_name, s_company_name, d_moy, sum(ss_sales_price) sum_sales, avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name) avg_monthly_sales + FROM item, store_sales, date_dim, store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_year = 1999 + AND ((i_category IN ('Books','Electronics','Sports') + AND i_class IN ('computers','stereo','football') ) + OR (i_category IN ('Men','Jewelry','Women') + AND i_class IN ('shirts','birdal','dresses'))) + GROUP BY i_category, i_class, i_brand, s_store_name, s_company_name, d_moy) tmp1 +WHERE CASE + WHEN (avg_monthly_sales <> 0) THEN (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales, + s_store_name, 1, 2, 3, 5, 6, 7, 8 +LIMIT 100; +---- +logical_plan +01)Sort: tmp1.sum_sales - tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.s_store_name ASC NULLS LAST, tmp1.i_category ASC NULLS LAST, tmp1.i_class ASC NULLS LAST, tmp1.i_brand ASC NULLS LAST, tmp1.s_company_name ASC NULLS LAST, tmp1.d_moy ASC NULLS LAST, fetch=100 +02)--SubqueryAlias: tmp1 +03)----Projection: item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales +04)------Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING != Decimal128(0.000000,21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(NULL,32,10) END > Decimal128(0.1000000000,32,10) +05)--------WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +06)----------Aggregate: groupBy=[[item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] +07)------------Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_sales_price, date_dim.d_moy, store.s_store_name, store.s_company_name +08)--------------Inner Join: store_sales.ss_store_sk = store.s_store_sk +09)----------------Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_moy +10)------------------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +11)--------------------Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price +12)----------------------Inner Join: item.i_item_sk = store_sales.ss_item_sk +13)------------------------Filter: (item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Electronics") OR item.i_category = Utf8View("Sports")) AND (item.i_class = Utf8View("computers") OR item.i_class = Utf8View("stereo") OR item.i_class = Utf8View("football")) OR (item.i_category = Utf8View("Men") OR item.i_category = Utf8View("Jewelry") OR item.i_category = Utf8View("Women")) AND (item.i_class = Utf8View("shirts") OR item.i_class = Utf8View("birdal") OR item.i_class = Utf8View("dresses")) +14)--------------------------TableScan: item projection=[i_item_sk, i_brand, i_class, i_category], partial_filters=[(item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Electronics") OR item.i_category = Utf8View("Sports")) AND (item.i_class = Utf8View("computers") OR item.i_class = Utf8View("stereo") OR item.i_class = Utf8View("football")) OR (item.i_category = Utf8View("Men") OR item.i_category = Utf8View("Jewelry") OR item.i_category = Utf8View("Women")) AND (item.i_class = Utf8View("shirts") OR item.i_class = Utf8View("birdal") OR item.i_class = Utf8View("dresses"))] +15)------------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] +16)--------------------Projection: date_dim.d_date_sk, date_dim.d_moy +17)----------------------Filter: date_dim.d_year = Int64(1999) +18)------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_year = Int64(1999)] +19)----------------TableScan: store projection=[s_store_sk, s_store_name, s_company_name] +physical_plan +01)SortPreservingMergeExec: [sum_sales@6 - avg_monthly_sales@7 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST, i_category@0 ASC NULLS LAST, i_class@1 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, s_company_name@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[sum_sales@6 - avg_monthly_sales@7 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST, i_category@0 ASC NULLS LAST, i_class@1 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, s_company_name@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, s_store_name@3 as s_store_name, s_company_name@4 as s_company_name, d_moy@5 as d_moy, sum(store_sales.ss_sales_price)@6 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg_monthly_sales] +04)------FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 != 0.000000 THEN abs(sum(store_sales.ss_sales_price)@6 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 END > 0.1000000000 +05)--------WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +06)----------SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST, s_company_name@4 ASC NULLS LAST], preserve_partitioning=[true] +07)------------RepartitionExec: partitioning=Hash([i_category@0, i_brand@2, s_store_name@3, s_company_name@4], 4), input_partitions=4 +08)--------------AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, s_store_name@3 as s_store_name, s_company_name@4 as s_company_name, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +09)----------------RepartitionExec: partitioning=Hash([i_category@0, i_class@1, i_brand@2, s_store_name@3, s_company_name@4, d_moy@5], 4), input_partitions=4 +10)------------------AggregateExec: mode=Partial, gby=[i_category@2 as i_category, i_class@1 as i_class, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] +11)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@3)], projection=[i_brand@3, i_class@4, i_category@5, ss_sales_price@7, d_moy@8, s_store_name@1, s_company_name@2] +12)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_company_name], file_type=vortex +13)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@3)], projection=[i_brand@2, i_class@3, i_category@4, ss_store_sk@6, ss_sales_price@7, d_moy@1] +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_moy], file_type=vortex, predicate: d_year@6 = 1999 +15)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_class@2, i_category@3, ss_sold_date_sk@4, ss_store_sk@6, ss_sales_price@7] +16)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_brand, i_class, i_category], file_type=vortex, predicate: (i_category@12 = Books OR i_category@12 = Electronics OR i_category@12 = Sports) AND (i_class@10 = computers OR i_class@10 = stereo OR i_class@10 = football) OR (i_category@12 = Men OR i_category@12 = Jewelry OR i_category@12 = Women) AND (i_class@10 = shirts OR i_class@10 = birdal OR i_class@10 = dresses) +17)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q9.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q9.slt.no new file mode 100644 index 00000000000..af0bac6df5b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q9.slt.no @@ -0,0 +1,227 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) > 74129 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) + END bucket1, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) > 122840 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) + END bucket2, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) > 56580 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) + END bucket3, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) > 10097 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) + END bucket4, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) > 165306 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) + END bucket5 +FROM reason +WHERE r_reason_sk = 1 ; +---- +logical_plan +01)Projection: CASE WHEN () > Int64(74129) THEN () ELSE () END AS bucket1, CASE WHEN () > Int64(122840) THEN () ELSE () END AS bucket2, CASE WHEN () > Int64(56580) THEN () ELSE () END AS bucket3, CASE WHEN () > Int64(10097) THEN () ELSE () END AS bucket4, CASE WHEN () > Int64(165306) THEN () ELSE () END AS bucket5 +02)--Subquery: +03)----Projection: count(Int64(1)) AS count(*) +04)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +05)--------Projection: +06)----------Filter: store_sales.ss_quantity >= Int64(1) AND store_sales.ss_quantity <= Int64(20) +07)------------TableScan: store_sales projection=[ss_quantity], partial_filters=[store_sales.ss_quantity >= Int64(1), store_sales.ss_quantity <= Int64(20)] +08)--Subquery: +09)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] +10)------Projection: store_sales.ss_ext_discount_amt +11)--------Filter: store_sales.ss_quantity >= Int64(1) AND store_sales.ss_quantity <= Int64(20) +12)----------TableScan: store_sales projection=[ss_quantity, ss_ext_discount_amt], partial_filters=[store_sales.ss_quantity >= Int64(1), store_sales.ss_quantity <= Int64(20)] +13)--Subquery: +14)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_paid)]] +15)------Projection: store_sales.ss_net_paid +16)--------Filter: store_sales.ss_quantity >= Int64(1) AND store_sales.ss_quantity <= Int64(20) +17)----------TableScan: store_sales projection=[ss_quantity, ss_net_paid], partial_filters=[store_sales.ss_quantity >= Int64(1), store_sales.ss_quantity <= Int64(20)] +18)--Subquery: +19)----Projection: count(Int64(1)) AS count(*) +20)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +21)--------Projection: +22)----------Filter: store_sales.ss_quantity >= Int64(21) AND store_sales.ss_quantity <= Int64(40) +23)------------TableScan: store_sales projection=[ss_quantity], partial_filters=[store_sales.ss_quantity >= Int64(21), store_sales.ss_quantity <= Int64(40)] +24)--Subquery: +25)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] +26)------Projection: store_sales.ss_ext_discount_amt +27)--------Filter: store_sales.ss_quantity >= Int64(21) AND store_sales.ss_quantity <= Int64(40) +28)----------TableScan: store_sales projection=[ss_quantity, ss_ext_discount_amt], partial_filters=[store_sales.ss_quantity >= Int64(21), store_sales.ss_quantity <= Int64(40)] +29)--Subquery: +30)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_paid)]] +31)------Projection: store_sales.ss_net_paid +32)--------Filter: store_sales.ss_quantity >= Int64(21) AND store_sales.ss_quantity <= Int64(40) +33)----------TableScan: store_sales projection=[ss_quantity, ss_net_paid], partial_filters=[store_sales.ss_quantity >= Int64(21), store_sales.ss_quantity <= Int64(40)] +34)--Subquery: +35)----Projection: count(Int64(1)) AS count(*) +36)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +37)--------Projection: +38)----------Filter: store_sales.ss_quantity >= Int64(41) AND store_sales.ss_quantity <= Int64(60) +39)------------TableScan: store_sales projection=[ss_quantity], partial_filters=[store_sales.ss_quantity >= Int64(41), store_sales.ss_quantity <= Int64(60)] +40)--Subquery: +41)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] +42)------Projection: store_sales.ss_ext_discount_amt +43)--------Filter: store_sales.ss_quantity >= Int64(41) AND store_sales.ss_quantity <= Int64(60) +44)----------TableScan: store_sales projection=[ss_quantity, ss_ext_discount_amt], partial_filters=[store_sales.ss_quantity >= Int64(41), store_sales.ss_quantity <= Int64(60)] +45)--Subquery: +46)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_paid)]] +47)------Projection: store_sales.ss_net_paid +48)--------Filter: store_sales.ss_quantity >= Int64(41) AND store_sales.ss_quantity <= Int64(60) +49)----------TableScan: store_sales projection=[ss_quantity, ss_net_paid], partial_filters=[store_sales.ss_quantity >= Int64(41), store_sales.ss_quantity <= Int64(60)] +50)--Subquery: +51)----Projection: count(Int64(1)) AS count(*) +52)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +53)--------Projection: +54)----------Filter: store_sales.ss_quantity >= Int64(61) AND store_sales.ss_quantity <= Int64(80) +55)------------TableScan: store_sales projection=[ss_quantity], partial_filters=[store_sales.ss_quantity >= Int64(61), store_sales.ss_quantity <= Int64(80)] +56)--Subquery: +57)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] +58)------Projection: store_sales.ss_ext_discount_amt +59)--------Filter: store_sales.ss_quantity >= Int64(61) AND store_sales.ss_quantity <= Int64(80) +60)----------TableScan: store_sales projection=[ss_quantity, ss_ext_discount_amt], partial_filters=[store_sales.ss_quantity >= Int64(61), store_sales.ss_quantity <= Int64(80)] +61)--Subquery: +62)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_paid)]] +63)------Projection: store_sales.ss_net_paid +64)--------Filter: store_sales.ss_quantity >= Int64(61) AND store_sales.ss_quantity <= Int64(80) +65)----------TableScan: store_sales projection=[ss_quantity, ss_net_paid], partial_filters=[store_sales.ss_quantity >= Int64(61), store_sales.ss_quantity <= Int64(80)] +66)--Subquery: +67)----Projection: count(Int64(1)) AS count(*) +68)------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +69)--------Projection: +70)----------Filter: store_sales.ss_quantity >= Int64(81) AND store_sales.ss_quantity <= Int64(100) +71)------------TableScan: store_sales projection=[ss_quantity], partial_filters=[store_sales.ss_quantity >= Int64(81), store_sales.ss_quantity <= Int64(100)] +72)--Subquery: +73)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] +74)------Projection: store_sales.ss_ext_discount_amt +75)--------Filter: store_sales.ss_quantity >= Int64(81) AND store_sales.ss_quantity <= Int64(100) +76)----------TableScan: store_sales projection=[ss_quantity, ss_ext_discount_amt], partial_filters=[store_sales.ss_quantity >= Int64(81), store_sales.ss_quantity <= Int64(100)] +77)--Subquery: +78)----Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_paid)]] +79)------Projection: store_sales.ss_net_paid +80)--------Filter: store_sales.ss_quantity >= Int64(81) AND store_sales.ss_quantity <= Int64(100) +81)----------TableScan: store_sales projection=[ss_quantity, ss_net_paid], partial_filters=[store_sales.ss_quantity >= Int64(81), store_sales.ss_quantity <= Int64(100)] +82)--Filter: reason.r_reason_sk = Int64(1) +83)----TableScan: reason projection=[r_reason_sk], partial_filters=[reason.r_reason_sk = Int64(1)] +physical_plan +01)ScalarSubqueryExec: subqueries=15 +02)--ProjectionExec: expr=[CASE WHEN scalar_subquery() > 74129 THEN scalar_subquery() ELSE scalar_subquery() END as bucket1, CASE WHEN scalar_subquery() > 122840 THEN scalar_subquery() ELSE scalar_subquery() END as bucket2, CASE WHEN scalar_subquery() > 56580 THEN scalar_subquery() ELSE scalar_subquery() END as bucket3, CASE WHEN scalar_subquery() > 10097 THEN scalar_subquery() ELSE scalar_subquery() END as bucket4, CASE WHEN scalar_subquery() > 165306 THEN scalar_subquery() ELSE scalar_subquery() END as bucket5] +03)----RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +04)------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/reason.vortex]]}, projection=[r_reason_sk], file_type=vortex, predicate: r_reason_sk@0 = 1 +05)--ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +06)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +07)------CoalescePartitionsExec +08)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +09)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, file_type=vortex, predicate: ss_quantity@10 >= 1 AND ss_quantity@10 <= 20 +10)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +11)----CoalescePartitionsExec +12)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +13)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_ext_discount_amt], file_type=vortex, predicate: ss_quantity@10 >= 1 AND ss_quantity@10 <= 20 +14)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_paid)] +15)----CoalescePartitionsExec +16)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_paid)] +17)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_net_paid], file_type=vortex, predicate: ss_quantity@10 >= 1 AND ss_quantity@10 <= 20 +18)--ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +19)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +20)------CoalescePartitionsExec +21)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +22)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, file_type=vortex, predicate: ss_quantity@10 >= 21 AND ss_quantity@10 <= 40 +23)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +24)----CoalescePartitionsExec +25)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +26)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_ext_discount_amt], file_type=vortex, predicate: ss_quantity@10 >= 21 AND ss_quantity@10 <= 40 +27)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_paid)] +28)----CoalescePartitionsExec +29)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_paid)] +30)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_net_paid], file_type=vortex, predicate: ss_quantity@10 >= 21 AND ss_quantity@10 <= 40 +31)--ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +32)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +33)------CoalescePartitionsExec +34)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +35)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, file_type=vortex, predicate: ss_quantity@10 >= 41 AND ss_quantity@10 <= 60 +36)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +37)----CoalescePartitionsExec +38)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +39)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_ext_discount_amt], file_type=vortex, predicate: ss_quantity@10 >= 41 AND ss_quantity@10 <= 60 +40)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_paid)] +41)----CoalescePartitionsExec +42)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_paid)] +43)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_net_paid], file_type=vortex, predicate: ss_quantity@10 >= 41 AND ss_quantity@10 <= 60 +44)--ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +45)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +46)------CoalescePartitionsExec +47)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +48)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, file_type=vortex, predicate: ss_quantity@10 >= 61 AND ss_quantity@10 <= 80 +49)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +50)----CoalescePartitionsExec +51)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +52)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_ext_discount_amt], file_type=vortex, predicate: ss_quantity@10 >= 61 AND ss_quantity@10 <= 80 +53)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_paid)] +54)----CoalescePartitionsExec +55)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_paid)] +56)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_net_paid], file_type=vortex, predicate: ss_quantity@10 >= 61 AND ss_quantity@10 <= 80 +57)--ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +58)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +59)------CoalescePartitionsExec +60)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +61)----------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, file_type=vortex, predicate: ss_quantity@10 >= 81 AND ss_quantity@10 <= 100 +62)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +63)----CoalescePartitionsExec +64)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] +65)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_ext_discount_amt], file_type=vortex, predicate: ss_quantity@10 >= 81 AND ss_quantity@10 <= 100 +66)--AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_paid)] +67)----CoalescePartitionsExec +68)------AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_paid)] +69)--------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_net_paid], file_type=vortex, predicate: ss_quantity@10 >= 81 AND ss_quantity@10 <= 100 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no new file mode 100644 index 00000000000..7e098e17175 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no @@ -0,0 +1,100 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT case when pmc=0 then null else cast(amc AS decimal(15,4))/cast(pmc AS decimal(15,4)) end am_pm_ratio +FROM + (SELECT count(*) amc + FROM web_sales, + household_demographics, + time_dim, + web_page + WHERE ws_sold_time_sk = time_dim.t_time_sk + AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk + AND ws_web_page_sk = web_page.wp_web_page_sk + AND time_dim.t_hour BETWEEN 8 AND 8+1 + AND household_demographics.hd_dep_count = 6 + AND web_page.wp_char_count BETWEEN 5000 AND 5200) "at", + (SELECT count(*) pmc + FROM web_sales, + household_demographics, + time_dim, + web_page + WHERE ws_sold_time_sk = time_dim.t_time_sk + AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk + AND ws_web_page_sk = web_page.wp_web_page_sk + AND time_dim.t_hour BETWEEN 19 AND 19+1 + AND household_demographics.hd_dep_count = 6 + AND web_page.wp_char_count BETWEEN 5000 AND 5200) pt +ORDER BY am_pm_ratio +LIMIT 100; +---- +logical_plan +01)Sort: am_pm_ratio ASC NULLS LAST, fetch=100 +02)--Projection: CASE WHEN pt.pmc = Int64(0) THEN Decimal128(NULL,23,8) ELSE CAST(at.amc AS Decimal128(15, 4)) / CAST(pt.pmc AS Decimal128(15, 4)) END AS am_pm_ratio +03)----Cross Join: +04)------SubqueryAlias: at +05)--------Projection: count(Int64(1)) AS count(*) AS amc +06)----------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +07)------------Projection: +08)--------------Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk +09)----------------Projection: web_sales.ws_web_page_sk +10)------------------Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk +11)--------------------Projection: web_sales.ws_sold_time_sk, web_sales.ws_web_page_sk +12)----------------------Inner Join: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk +13)------------------------TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] +14)------------------------Projection: household_demographics.hd_demo_sk +15)--------------------------Filter: household_demographics.hd_dep_count = Int64(6) +16)----------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], partial_filters=[household_demographics.hd_dep_count = Int64(6)] +17)--------------------Projection: time_dim.t_time_sk +18)----------------------Filter: time_dim.t_hour >= Int64(8) AND time_dim.t_hour <= Int64(9) +19)------------------------TableScan: time_dim projection=[t_time_sk, t_hour], partial_filters=[time_dim.t_hour >= Int64(8), time_dim.t_hour <= Int64(9)] +20)----------------Projection: web_page.wp_web_page_sk +21)------------------Filter: web_page.wp_char_count >= Int64(5000) AND web_page.wp_char_count <= Int64(5200) +22)--------------------TableScan: web_page projection=[wp_web_page_sk, wp_char_count], partial_filters=[web_page.wp_char_count >= Int64(5000), web_page.wp_char_count <= Int64(5200)] +23)------SubqueryAlias: pt +24)--------Projection: count(Int64(1)) AS count(*) AS pmc +25)----------Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +26)------------Projection: +27)--------------Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk +28)----------------Projection: web_sales.ws_web_page_sk +29)------------------Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk +30)--------------------Projection: web_sales.ws_sold_time_sk, web_sales.ws_web_page_sk +31)----------------------Inner Join: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk +32)------------------------TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] +33)------------------------Projection: household_demographics.hd_demo_sk +34)--------------------------Filter: household_demographics.hd_dep_count = Int64(6) +35)----------------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], partial_filters=[household_demographics.hd_dep_count = Int64(6)] +36)--------------------Projection: time_dim.t_time_sk +37)----------------------Filter: time_dim.t_hour >= Int64(19) AND time_dim.t_hour <= Int64(20) +38)------------------------TableScan: time_dim projection=[t_time_sk, t_hour], partial_filters=[time_dim.t_hour >= Int64(19), time_dim.t_hour <= Int64(20)] +39)----------------Projection: web_page.wp_web_page_sk +40)------------------Filter: web_page.wp_char_count >= Int64(5000) AND web_page.wp_char_count <= Int64(5200) +41)--------------------TableScan: web_page projection=[wp_web_page_sk, wp_char_count], partial_filters=[web_page.wp_char_count >= Int64(5000), web_page.wp_char_count <= Int64(5200)] +physical_plan +01)SortExec: TopK(fetch=100), expr=[am_pm_ratio@0 ASC NULLS LAST], preserve_partitioning=[false] +02)--ProjectionExec: expr=[CASE WHEN pmc@1 = 0 THEN NULL ELSE CAST(amc@0 AS Decimal128(15, 4)) / CAST(pmc@1 AS Decimal128(15, 4)) END as am_pm_ratio] +03)----CrossJoinExec +04)------ProjectionExec: expr=[count(Int64(1))@0 as amc] +05)--------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +06)----------CoalescePartitionsExec +07)------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wp_web_page_sk@0, ws_web_page_sk@0)], projection=[] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_page.vortex]]}, projection=[wp_web_page_sk], file_type=vortex, predicate: wp_char_count@10 >= 5000 AND wp_char_count@10 <= 5200 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ws_sold_time_sk@0)], projection=[ws_web_page_sk@2] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 >= 8 AND t_hour@3 <= 9 +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ws_ship_hdemo_sk@1)], projection=[ws_sold_time_sk@1, ws_web_page_sk@3] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 6 +14)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk], file_type=vortex +15)------ProjectionExec: expr=[count(Int64(1))@0 as pmc] +16)--------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +17)----------CoalescePartitionsExec +18)------------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +19)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(wp_web_page_sk@0, ws_web_page_sk@0)], projection=[] +20)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_page.vortex]]}, projection=[wp_web_page_sk], file_type=vortex, predicate: wp_char_count@10 >= 5000 AND wp_char_count@10 <= 5200 +21)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ws_sold_time_sk@0)], projection=[ws_web_page_sk@2] +22)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 >= 19 AND t_hour@3 <= 20 +23)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ws_ship_hdemo_sk@1)], projection=[ws_sold_time_sk@1, ws_web_page_sk@3] +24)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 6 +25)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no new file mode 100644 index 00000000000..43a4870fdf2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no @@ -0,0 +1,95 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT cc_call_center_id Call_Center, + cc_name Call_Center_Name, + cc_manager Manager, + sum(cr_net_loss) Returns_Loss +FROM call_center, + catalog_returns, + date_dim, + customer, + customer_address, + customer_demographics, + household_demographics +WHERE cr_call_center_sk = cc_call_center_sk + AND cr_returned_date_sk = d_date_sk + AND cr_returning_customer_sk= c_customer_sk + AND cd_demo_sk = c_current_cdemo_sk + AND hd_demo_sk = c_current_hdemo_sk + AND ca_address_sk = c_current_addr_sk + AND d_year = 1998 + AND d_moy = 11 + AND ((cd_marital_status = 'M' + AND cd_education_status = 'Unknown') or(cd_marital_status = 'W' + AND cd_education_status = 'Advanced Degree')) + AND hd_buy_potential LIKE 'Unknown%' + AND ca_gmt_offset = -7 +GROUP BY cc_call_center_id, + cc_name, + cc_manager, + cd_marital_status, + cd_education_status +ORDER BY sum(cr_net_loss) DESC; +---- +logical_plan +01)Sort: returns_loss DESC NULLS FIRST +02)--Projection: call_center.cc_call_center_id AS call_center, call_center.cc_name AS call_center_name, call_center.cc_manager AS manager, sum(catalog_returns.cr_net_loss) AS returns_loss +03)----Aggregate: groupBy=[[call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, customer_demographics.cd_marital_status, customer_demographics.cd_education_status]], aggr=[[sum(catalog_returns.cr_net_loss)]] +04)------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer_demographics.cd_marital_status, customer_demographics.cd_education_status +05)--------Inner Join: customer.c_current_hdemo_sk = household_demographics.hd_demo_sk +06)----------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_hdemo_sk, customer_demographics.cd_marital_status, customer_demographics.cd_education_status +07)------------Inner Join: customer.c_current_cdemo_sk = customer_demographics.cd_demo_sk +08)--------------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk +09)----------------Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk +10)------------------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk +11)--------------------Inner Join: catalog_returns.cr_returning_customer_sk = customer.c_customer_sk +12)----------------------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_returning_customer_sk, catalog_returns.cr_net_loss +13)------------------------Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk +14)--------------------------Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_returned_date_sk, catalog_returns.cr_returning_customer_sk, catalog_returns.cr_net_loss +15)----------------------------Inner Join: call_center.cc_call_center_sk = catalog_returns.cr_call_center_sk +16)------------------------------TableScan: call_center projection=[cc_call_center_sk, cc_call_center_id, cc_name, cc_manager] +17)------------------------------TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_call_center_sk, cr_net_loss] +18)--------------------------Projection: date_dim.d_date_sk +19)----------------------------Filter: date_dim.d_moy = Int64(11) AND date_dim.d_year = Int64(1998) +20)------------------------------TableScan: date_dim projection=[d_date_sk, d_year, d_moy], partial_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1998)] +21)----------------------TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk] +22)------------------Projection: customer_address.ca_address_sk +23)--------------------Filter: customer_address.ca_gmt_offset = Decimal128(-7.00,5,2) +24)----------------------TableScan: customer_address projection=[ca_address_sk, ca_gmt_offset], partial_filters=[customer_address.ca_gmt_offset = Decimal128(-7.00,5,2)] +25)--------------Filter: customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Unknown") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree") +26)----------------TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], partial_filters=[customer_demographics.cd_marital_status = Utf8View("M") AND customer_demographics.cd_education_status = Utf8View("Unknown") OR customer_demographics.cd_marital_status = Utf8View("W") AND customer_demographics.cd_education_status = Utf8View("Advanced Degree")] +27)----------Projection: household_demographics.hd_demo_sk +28)------------Filter: household_demographics.hd_buy_potential LIKE Utf8View("Unknown%") +29)--------------TableScan: household_demographics projection=[hd_demo_sk, hd_buy_potential], partial_filters=[household_demographics.hd_buy_potential LIKE Utf8View("Unknown%")] +physical_plan +01)SortPreservingMergeExec: [returns_loss@3 DESC] +02)--SortExec: expr=[returns_loss@3 DESC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[cc_call_center_id@0 as call_center, cc_name@1 as call_center_name, cc_manager@2 as manager, sum(catalog_returns.cr_net_loss)@5 as returns_loss] +04)------AggregateExec: mode=FinalPartitioned, gby=[cc_call_center_id@0 as cc_call_center_id, cc_name@1 as cc_name, cc_manager@2 as cc_manager, cd_marital_status@3 as cd_marital_status, cd_education_status@4 as cd_education_status], aggr=[sum(catalog_returns.cr_net_loss)] +05)--------RepartitionExec: partitioning=Hash([cc_call_center_id@0, cc_name@1, cc_manager@2, cd_marital_status@3, cd_education_status@4], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[cc_call_center_id@0 as cc_call_center_id, cc_name@1 as cc_name, cc_manager@2 as cc_manager, cd_marital_status@4 as cd_marital_status, cd_education_status@5 as cd_education_status], aggr=[sum(catalog_returns.cr_net_loss)] +07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_hdemo_sk@4, hd_demo_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, cd_marital_status@5, cd_education_status@6] +08)--------------CoalescePartitionsExec +09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_cdemo_sk@4, cd_demo_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, c_current_hdemo_sk@5, cd_marital_status@7, cd_education_status@8] +10)------------------CoalescePartitionsExec +11)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_current_addr_sk@6, ca_address_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, c_current_cdemo_sk@4, c_current_hdemo_sk@5] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cr_returning_customer_sk@3, c_customer_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@4, c_current_cdemo_sk@6, c_current_hdemo_sk@7, c_current_addr_sk@8] +14)--------------------------CoalescePartitionsExec +15)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cr_returned_date_sk@3)], projection=[cc_call_center_id@1, cc_name@2, cc_manager@3, cr_returning_customer_sk@5, cr_net_loss@6] +16)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_moy@8 = 11 AND d_year@6 = 1998 +17)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cr_call_center_sk@2)], projection=[cc_call_center_id@1, cc_name@2, cc_manager@3, cr_returned_date_sk@4, cr_returning_customer_sk@5, cr_net_loss@7] +18)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk, cc_call_center_id, cc_name, cc_manager], file_type=vortex +19)--------------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +20)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_call_center_sk, cr_net_loss], file_type=vortex +21)--------------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +22)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk], file_type=vortex +23)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +24)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_gmt_offset@11 = -7.00 +25)------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +26)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex, predicate: cd_marital_status@2 = M AND cd_education_status@3 = Unknown OR cd_marital_status@2 = W AND cd_education_status@3 = Advanced Degree +27)--------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +28)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_buy_potential@2 LIKE Unknown% diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no new file mode 100644 index 00000000000..563c1659b27 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT sum(ws_ext_discount_amt) AS "Excess Discount Amount" +FROM web_sales, + item, + date_dim +WHERE i_manufact_id = 350 + AND i_item_sk = ws_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = ws_sold_date_sk + AND ws_ext_discount_amt > + (SELECT 1.3 * avg(ws_ext_discount_amt) + FROM web_sales, + date_dim + WHERE ws_item_sk = i_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = ws_sold_date_sk ) +ORDER BY sum(ws_ext_discount_amt) +LIMIT 100; +---- +logical_plan +01)Sort: Excess Discount Amount ASC NULLS LAST, fetch=100 +02)--Projection: sum(web_sales.ws_ext_discount_amt) AS Excess Discount Amount +03)----Aggregate: groupBy=[[]], aggr=[[sum(web_sales.ws_ext_discount_amt)]] +04)------Projection: web_sales.ws_ext_discount_amt +05)--------LeftSemi Join: item.i_item_sk = __scalar_sq_1.ws_item_sk Filter: CAST(web_sales.ws_ext_discount_amt AS Decimal128(30, 15)) > __scalar_sq_1.Float64(1.3) * avg(web_sales.ws_ext_discount_amt) +06)----------Projection: web_sales.ws_ext_discount_amt, item.i_item_sk +07)------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +08)--------------Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, item.i_item_sk +09)----------------Inner Join: web_sales.ws_item_sk = item.i_item_sk +10)------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] +11)------------------Projection: item.i_item_sk +12)--------------------Filter: item.i_manufact_id = Int64(350) +13)----------------------TableScan: item projection=[i_item_sk, i_manufact_id], partial_filters=[item.i_manufact_id = Int64(350)] +14)--------------Projection: date_dim.d_date_sk +15)----------------Filter: date_dim.d_date >= Date32("2000-01-27") AND date_dim.d_date <= Date32("2000-04-26") +16)------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-01-27"), date_dim.d_date <= Date32("2000-04-26")] +17)----------SubqueryAlias: __scalar_sq_1 +18)------------Projection: CAST(Float64(1.3) * CAST(avg(web_sales.ws_ext_discount_amt) AS Float64) AS Decimal128(30, 15)), web_sales.ws_item_sk +19)--------------Aggregate: groupBy=[[web_sales.ws_item_sk]], aggr=[[avg(web_sales.ws_ext_discount_amt)]] +20)----------------Projection: web_sales.ws_item_sk, web_sales.ws_ext_discount_amt +21)------------------Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk +22)--------------------TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] +23)--------------------Projection: date_dim.d_date_sk +24)----------------------Filter: date_dim.d_date >= Date32("2000-01-27") AND date_dim.d_date <= Date32("2000-04-26") +25)------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("2000-01-27"), date_dim.d_date <= Date32("2000-04-26")] +physical_plan +01)ProjectionExec: expr=[sum(web_sales.ws_ext_discount_amt)@0 as Excess Discount Amount] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[sum(web_sales.ws_ext_discount_amt)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[sum(web_sales.ws_ext_discount_amt)] +06)----------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(i_item_sk@1, ws_item_sk@1)], filter=CAST(ws_ext_discount_amt@0 AS Decimal128(30, 15)) > Float64(1.3) * avg(web_sales.ws_ext_discount_amt)@1, projection=[ws_ext_discount_amt@0] +07)------------CoalescePartitionsExec +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_ext_discount_amt@2, i_item_sk@3] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-01-27 AND d_date@2 <= 2000-04-26 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ws_item_sk@1)], projection=[ws_sold_date_sk@1, ws_ext_discount_amt@3, i_item_sk@0] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk], file_type=vortex, predicate: i_manufact_id@13 = 350 +12)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt], file_type=vortex +13)------------ProjectionExec: expr=[CAST(1.3 * CAST(avg(web_sales.ws_ext_discount_amt)@1 AS Float64) AS Decimal128(30, 15)) as Float64(1.3) * avg(web_sales.ws_ext_discount_amt), ws_item_sk@0 as ws_item_sk] +14)--------------AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk], aggr=[avg(web_sales.ws_ext_discount_amt)] +15)----------------RepartitionExec: partitioning=Hash([ws_item_sk@0], 4), input_partitions=4 +16)------------------AggregateExec: mode=Partial, gby=[ws_item_sk@0 as ws_item_sk], aggr=[avg(web_sales.ws_ext_discount_amt)] +17)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_sold_date_sk@0)], projection=[ws_item_sk@2, ws_ext_discount_amt@3] +18)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 2000-01-27 AND d_date@2 <= 2000-04-26 +19)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q93.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q93.slt.no new file mode 100644 index 00000000000..735afa62962 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q93.slt.no @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT ss_customer_sk, + sum(act_sales) sumsales +FROM + (SELECT ss_item_sk, + ss_ticket_number, + ss_customer_sk, + CASE + WHEN sr_return_quantity IS NOT NULL THEN (ss_quantity-sr_return_quantity)*ss_sales_price + ELSE (ss_quantity*ss_sales_price) + END act_sales + FROM store_sales + LEFT OUTER JOIN store_returns ON (sr_item_sk = ss_item_sk + AND sr_ticket_number = ss_ticket_number) ,reason + WHERE sr_reason_sk = r_reason_sk + AND r_reason_desc = 'reason 28') t +GROUP BY ss_customer_sk +ORDER BY sumsales NULLS FIRST, + ss_customer_sk NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sumsales ASC NULLS FIRST, t.ss_customer_sk ASC NULLS FIRST, fetch=100 +02)--Projection: t.ss_customer_sk, sum(t.act_sales) AS sumsales +03)----Aggregate: groupBy=[[t.ss_customer_sk]], aggr=[[sum(t.act_sales)]] +04)------SubqueryAlias: t +05)--------Projection: store_sales.ss_customer_sk, CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN CAST(store_sales.ss_quantity - store_returns.sr_return_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price ELSE CAST(store_sales.ss_quantity AS Decimal128(20, 0)) * store_sales.ss_sales_price END AS act_sales +06)----------Inner Join: store_returns.sr_reason_sk = reason.r_reason_sk +07)------------Projection: store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_returns.sr_reason_sk, store_returns.sr_return_quantity +08)--------------Left Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number +09)----------------TableScan: store_sales projection=[ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_sales_price] +10)----------------TableScan: store_returns projection=[sr_item_sk, sr_reason_sk, sr_ticket_number, sr_return_quantity] +11)------------Projection: reason.r_reason_sk +12)--------------Filter: reason.r_reason_desc = Utf8View("reason 28") +13)----------------TableScan: reason projection=[r_reason_sk, r_reason_desc], partial_filters=[reason.r_reason_desc = Utf8View("reason 28")] +physical_plan +01)SortPreservingMergeExec: [sumsales@1 ASC, ss_customer_sk@0 ASC], fetch=100 +02)--ProjectionExec: expr=[ss_customer_sk@0 as ss_customer_sk, sum(t.act_sales)@1 as sumsales] +03)----SortExec: TopK(fetch=100), expr=[sum(t.act_sales)@1 ASC, ss_customer_sk@0 ASC], preserve_partitioning=[true] +04)------AggregateExec: mode=FinalPartitioned, gby=[ss_customer_sk@0 as ss_customer_sk], aggr=[sum(t.act_sales)] +05)--------RepartitionExec: partitioning=Hash([ss_customer_sk@0], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[ss_customer_sk@0 as ss_customer_sk], aggr=[sum(t.act_sales)] +07)------------ProjectionExec: expr=[ss_customer_sk@0 as ss_customer_sk, CASE WHEN sr_return_quantity@1 IS NOT NULL THEN CAST(ss_quantity@2 - sr_return_quantity@1 AS Decimal128(20, 0)) * ss_sales_price@3 ELSE CAST(ss_quantity@2 AS Decimal128(20, 0)) * ss_sales_price@3 END as act_sales] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_reason_sk@0, sr_reason_sk@3)], projection=[ss_customer_sk@1, sr_return_quantity@5, ss_quantity@2, ss_sales_price@3] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/reason.vortex]]}, projection=[r_reason_sk], file_type=vortex, predicate: r_reason_desc@2 = reason 28 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Right, on=[(sr_item_sk@0, ss_item_sk@0), (sr_ticket_number@2, ss_ticket_number@2)], projection=[ss_customer_sk@5, ss_quantity@7, ss_sales_price@8, sr_reason_sk@1, sr_return_quantity@3] +11)------------------CoalescePartitionsExec +12)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:], [${WORK_DIR}/store_returns.vortex:]]}, projection=[sr_item_sk, sr_reason_sk, sr_ticket_number, sr_return_quantity], file_type=vortex +13)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no new file mode 100644 index 00000000000..05864072ca4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no @@ -0,0 +1,84 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT count(DISTINCT ws_order_number) AS "order count" , + sum(ws_ext_ship_cost) AS "total shipping cost" , + sum(ws_net_profit) AS "total net profit" +FROM web_sales ws1 , + date_dim , + customer_address , + web_site +WHERE d_date BETWEEN '1999-02-01' AND cast('1999-04-02' AS date) + AND ws1.ws_ship_date_sk = d_date_sk + AND ws1.ws_ship_addr_sk = ca_address_sk + AND ca_state = 'IL' + AND ws1.ws_web_site_sk = web_site_sk + AND web_company_name = 'pri' + AND EXISTS + (SELECT * + FROM web_sales ws2 + WHERE ws1.ws_order_number = ws2.ws_order_number + AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) + AND NOT exists + (SELECT * + FROM web_returns wr1 + WHERE ws1.ws_order_number = wr1.wr_order_number) +ORDER BY count(DISTINCT ws_order_number) +LIMIT 100; +---- +logical_plan +01)Sort: order count ASC NULLS LAST, fetch=100 +02)--Projection: count(alias1) AS order count, sum(alias2) AS total shipping cost, sum(alias3) AS total net profit +03)----Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] +04)------Aggregate: groupBy=[[ws1.ws_order_number AS alias1]], aggr=[[sum(ws1.ws_ext_ship_cost) AS alias2, sum(ws1.ws_net_profit) AS alias3]] +05)--------LeftAnti Join: ws1.ws_order_number = __correlated_sq_2.wr_order_number +06)----------Projection: ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +07)------------LeftSemi Join: ws1.ws_order_number = __correlated_sq_1.ws_order_number Filter: ws1.ws_warehouse_sk != __correlated_sq_1.ws_warehouse_sk +08)--------------Projection: ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +09)----------------Inner Join: ws1.ws_web_site_sk = web_site.web_site_sk +10)------------------Projection: ws1.ws_web_site_sk, ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +11)--------------------Inner Join: ws1.ws_ship_addr_sk = customer_address.ca_address_sk +12)----------------------Projection: ws1.ws_ship_addr_sk, ws1.ws_web_site_sk, ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +13)------------------------Inner Join: ws1.ws_ship_date_sk = date_dim.d_date_sk +14)--------------------------SubqueryAlias: ws1 +15)----------------------------TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_warehouse_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] +16)--------------------------Projection: date_dim.d_date_sk +17)----------------------------Filter: date_dim.d_date >= Date32("1999-02-01") AND date_dim.d_date <= Date32("1999-04-02") +18)------------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("1999-02-01"), date_dim.d_date <= Date32("1999-04-02")] +19)----------------------Projection: customer_address.ca_address_sk +20)------------------------Filter: customer_address.ca_state = Utf8View("IL") +21)--------------------------TableScan: customer_address projection=[ca_address_sk, ca_state], partial_filters=[customer_address.ca_state = Utf8View("IL")] +22)------------------Projection: web_site.web_site_sk +23)--------------------Filter: web_site.web_company_name = Utf8View("pri") +24)----------------------TableScan: web_site projection=[web_site_sk, web_company_name], partial_filters=[web_site.web_company_name = Utf8View("pri")] +25)--------------SubqueryAlias: __correlated_sq_1 +26)----------------SubqueryAlias: ws2 +27)------------------TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] +28)----------SubqueryAlias: __correlated_sq_2 +29)------------SubqueryAlias: wr1 +30)--------------TableScan: web_returns projection=[wr_order_number] +physical_plan +01)ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +06)----------AggregateExec: mode=FinalPartitioned, gby=[alias1@0 as alias1], aggr=[sum(ws1.ws_ext_ship_cost) as alias2, sum(ws1.ws_net_profit) as alias3] +07)------------RepartitionExec: partitioning=Hash([alias1@0], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[ws_order_number@0 as alias1], aggr=[sum(ws1.ws_ext_ship_cost) as alias2, sum(ws1.ws_net_profit) as alias3] +09)----------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 +10)------------------HashJoinExec: mode=CollectLeft, join_type=LeftAnti, on=[(ws_order_number@0, wr_order_number@0)] +11)--------------------CoalescePartitionsExec +12)----------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@0 != ws_warehouse_sk@1, projection=[ws_order_number@1, ws_ext_ship_cost@2, ws_net_profit@3] +13)------------------------CoalescePartitionsExec +14)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(web_site_sk@0, ws_web_site_sk@0)], projection=[ws_warehouse_sk@2, ws_order_number@3, ws_ext_ship_cost@4, ws_net_profit@5] +15)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_site.vortex]]}, projection=[web_site_sk], file_type=vortex, predicate: web_company_name@14 = pri +16)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ws_ship_addr_sk@0)], projection=[ws_web_site_sk@2, ws_warehouse_sk@3, ws_order_number@4, ws_ext_ship_cost@5, ws_net_profit@6] +17)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_state@8 = IL +18)------------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_ship_date_sk@0)], projection=[ws_ship_addr_sk@2, ws_web_site_sk@3, ws_warehouse_sk@4, ws_order_number@5, ws_ext_ship_cost@6, ws_net_profit@7] +19)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 1999-02-01 AND d_date@2 <= 1999-04-02 +20)--------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_warehouse_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit], file_type=vortex +21)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_warehouse_sk, ws_order_number], file_type=vortex +22)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_order_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no new file mode 100644 index 00000000000..ac5eed7e74c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no @@ -0,0 +1,111 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ws_wh AS + (SELECT ws1.ws_order_number, + ws1.ws_warehouse_sk wh1, + ws2.ws_warehouse_sk wh2 + FROM web_sales ws1, + web_sales ws2 + WHERE ws1.ws_order_number = ws2.ws_order_number + AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) +SELECT count(DISTINCT ws_order_number) AS "order count" , + sum(ws_ext_ship_cost) AS "total shipping cost" , + sum(ws_net_profit) AS "total net profit" +FROM web_sales ws1 , + date_dim , + customer_address , + web_site +WHERE d_date BETWEEN '1999-02-01' AND cast('1999-04-02' AS date) + AND ws1.ws_ship_date_sk = d_date_sk + AND ws1.ws_ship_addr_sk = ca_address_sk + AND ca_state = 'IL' + AND ws1.ws_web_site_sk = web_site_sk + AND web_company_name = 'pri' + AND ws1.ws_order_number IN + (SELECT ws_order_number + FROM ws_wh) + AND ws1.ws_order_number IN + (SELECT wr_order_number + FROM web_returns, + ws_wh + WHERE wr_order_number = ws_wh.ws_order_number) +ORDER BY count(DISTINCT ws_order_number) +LIMIT 100; +---- +logical_plan +01)Sort: order count ASC NULLS LAST, fetch=100 +02)--Projection: count(alias1) AS order count, sum(alias2) AS total shipping cost, sum(alias3) AS total net profit +03)----Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] +04)------Aggregate: groupBy=[[ws1.ws_order_number AS alias1]], aggr=[[sum(ws1.ws_ext_ship_cost) AS alias2, sum(ws1.ws_net_profit) AS alias3]] +05)--------LeftSemi Join: ws1.ws_order_number = __correlated_sq_2.wr_order_number +06)----------LeftSemi Join: ws1.ws_order_number = __correlated_sq_1.ws_order_number +07)------------Projection: ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +08)--------------Inner Join: ws1.ws_web_site_sk = web_site.web_site_sk +09)----------------Projection: ws1.ws_web_site_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +10)------------------Inner Join: ws1.ws_ship_addr_sk = customer_address.ca_address_sk +11)--------------------Projection: ws1.ws_ship_addr_sk, ws1.ws_web_site_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit +12)----------------------Inner Join: ws1.ws_ship_date_sk = date_dim.d_date_sk +13)------------------------SubqueryAlias: ws1 +14)--------------------------TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] +15)------------------------Projection: date_dim.d_date_sk +16)--------------------------Filter: date_dim.d_date >= Date32("1999-02-01") AND date_dim.d_date <= Date32("1999-04-02") +17)----------------------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("1999-02-01"), date_dim.d_date <= Date32("1999-04-02")] +18)--------------------Projection: customer_address.ca_address_sk +19)----------------------Filter: customer_address.ca_state = Utf8View("IL") +20)------------------------TableScan: customer_address projection=[ca_address_sk, ca_state], partial_filters=[customer_address.ca_state = Utf8View("IL")] +21)----------------Projection: web_site.web_site_sk +22)------------------Filter: web_site.web_company_name = Utf8View("pri") +23)--------------------TableScan: web_site projection=[web_site_sk, web_company_name], partial_filters=[web_site.web_company_name = Utf8View("pri")] +24)------------SubqueryAlias: __correlated_sq_1 +25)--------------SubqueryAlias: ws_wh +26)----------------Projection: ws1.ws_order_number +27)------------------LeftSemi Join: ws1.ws_order_number = ws2.ws_order_number Filter: ws2.ws_warehouse_sk != ws1.ws_warehouse_sk +28)--------------------SubqueryAlias: ws1 +29)----------------------TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] +30)--------------------SubqueryAlias: ws2 +31)----------------------TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] +32)----------SubqueryAlias: __correlated_sq_2 +33)------------LeftSemi Join: web_returns.wr_order_number = ws_wh.ws_order_number +34)--------------TableScan: web_returns projection=[wr_order_number] +35)--------------SubqueryAlias: ws_wh +36)----------------Projection: ws1.ws_order_number +37)------------------LeftSemi Join: ws1.ws_order_number = ws2.ws_order_number Filter: ws2.ws_warehouse_sk != ws1.ws_warehouse_sk +38)--------------------SubqueryAlias: ws1 +39)----------------------TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] +40)--------------------SubqueryAlias: ws2 +41)----------------------TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] +physical_plan +01)ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] +06)----------AggregateExec: mode=FinalPartitioned, gby=[alias1@0 as alias1], aggr=[sum(ws1.ws_ext_ship_cost) as alias2, sum(ws1.ws_net_profit) as alias3] +07)------------RepartitionExec: partitioning=Hash([alias1@0], 4), input_partitions=4 +08)--------------AggregateExec: mode=Partial, gby=[ws_order_number@0 as alias1], aggr=[sum(ws1.ws_ext_ship_cost) as alias2, sum(ws1.ws_net_profit) as alias3] +09)----------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ws_order_number@0, wr_order_number@0)] +10)------------------CoalescePartitionsExec +11)--------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ws_order_number@0, ws_order_number@0)] +12)----------------------CoalescePartitionsExec +13)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(web_site_sk@0, ws_web_site_sk@0)], projection=[ws_order_number@2, ws_ext_ship_cost@3, ws_net_profit@4] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_site.vortex]]}, projection=[web_site_sk], file_type=vortex, predicate: web_company_name@14 = pri +15)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(ca_address_sk@0, ws_ship_addr_sk@0)], projection=[ws_web_site_sk@2, ws_order_number@3, ws_ext_ship_cost@4, ws_net_profit@5] +16)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk], file_type=vortex, predicate: ca_state@8 = IL +17)----------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ws_ship_date_sk@0)], projection=[ws_ship_addr_sk@2, ws_web_site_sk@3, ws_order_number@4, ws_ext_ship_cost@5, ws_net_profit@6] +18)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 1999-02-01 AND d_date@2 <= 1999-04-02 +19)------------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit], file_type=vortex +20)----------------------HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@1 != ws_warehouse_sk@0, projection=[ws_order_number@1] +21)------------------------RepartitionExec: partitioning=Hash([ws_order_number@1], 4), input_partitions=4 +22)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_warehouse_sk, ws_order_number], file_type=vortex +23)------------------------RepartitionExec: partitioning=Hash([ws_order_number@1], 4), input_partitions=4 +24)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_warehouse_sk, ws_order_number], file_type=vortex +25)------------------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(wr_order_number@0, ws_order_number@0)] +26)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_order_number], file_type=vortex +27)--------------------HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@1 != ws_warehouse_sk@0, projection=[ws_order_number@1] +28)----------------------RepartitionExec: partitioning=Hash([ws_order_number@1], 4), input_partitions=4 +29)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_warehouse_sk, ws_order_number], file_type=vortex +30)----------------------RepartitionExec: partitioning=Hash([ws_order_number@1], 4), input_partitions=4 +31)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:], [${WORK_DIR}/web_sales.vortex:]]}, projection=[ws_warehouse_sk, ws_order_number], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q96.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q96.slt.no new file mode 100644 index 00000000000..c82568018a2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q96.slt.no @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT count(*) +FROM store_sales , + household_demographics, + time_dim, + store +WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 20 + AND time_dim.t_minute >= 30 + AND household_demographics.hd_dep_count = 7 + AND store.s_store_name = 'ese' +ORDER BY count(*) +LIMIT 100; +---- +logical_plan +01)Sort: count(*) ASC NULLS LAST, fetch=100 +02)--Projection: count(Int64(1)) AS count(*) +03)----Aggregate: groupBy=[[]], aggr=[[count(Int64(1))]] +04)------Projection: +05)--------Inner Join: store_sales.ss_store_sk = store.s_store_sk +06)----------Projection: store_sales.ss_store_sk +07)------------Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk +08)--------------Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk +09)----------------Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk +10)------------------TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] +11)------------------Projection: household_demographics.hd_demo_sk +12)--------------------Filter: household_demographics.hd_dep_count = Int64(7) +13)----------------------TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], partial_filters=[household_demographics.hd_dep_count = Int64(7)] +14)--------------Projection: time_dim.t_time_sk +15)----------------Filter: time_dim.t_hour = Int64(20) AND time_dim.t_minute >= Int64(30) +16)------------------TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], partial_filters=[time_dim.t_hour = Int64(20), time_dim.t_minute >= Int64(30)] +17)----------Projection: store.s_store_sk +18)------------Filter: store.s_store_name = Utf8View("ese") +19)--------------TableScan: store projection=[s_store_sk, s_store_name], partial_filters=[store.s_store_name = Utf8View("ese")] +physical_plan +01)ProjectionExec: expr=[count(Int64(1))@0 as count(*)] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[count(Int64(1))] +06)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[] +07)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk], file_type=vortex, predicate: s_store_name@5 = ese +08)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(t_time_sk@0, ss_sold_time_sk@0)], projection=[ss_store_sk@2] +09)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/time_dim.vortex]]}, projection=[t_time_sk], file_type=vortex, predicate: t_hour@3 = 20 AND t_minute@4 >= 30 +10)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(hd_demo_sk@0, ss_hdemo_sk@1)], projection=[ss_sold_time_sk@1, ss_store_sk@3] +11)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk], file_type=vortex, predicate: hd_dep_count@3 = 7 +12)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no new file mode 100644 index 00000000000..de71ee1f0f8 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no @@ -0,0 +1,87 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +WITH ssci AS + (SELECT ss_customer_sk customer_sk , + ss_item_sk item_sk + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 + GROUP BY ss_customer_sk , + ss_item_sk), + csci as + ( SELECT cs_bill_customer_sk customer_sk ,cs_item_sk item_sk + FROM catalog_sales,date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 + GROUP BY cs_bill_customer_sk ,cs_item_sk) +SELECT sum(CASE + WHEN ssci.customer_sk IS NOT NULL + AND csci.customer_sk IS NULL THEN 1 + ELSE 0 + END) store_only , + sum(CASE + WHEN ssci.customer_sk IS NULL + AND csci.customer_sk IS NOT NULL THEN 1 + ELSE 0 + END) catalog_only , + sum(CASE + WHEN ssci.customer_sk IS NOT NULL + AND csci.customer_sk IS NOT NULL THEN 1 + ELSE 0 + END) store_and_catalog +FROM ssci +FULL OUTER JOIN csci ON (ssci.customer_sk=csci.customer_sk + AND ssci.item_sk = csci.item_sk) +LIMIT 100; +---- +logical_plan +01)Projection: sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS store_only, sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS catalog_only, sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS store_and_catalog +02)--Limit: skip=0, fetch=100 +03)----Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN __common_expr_1 AS ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)]] +04)------Projection: ssci.customer_sk IS NOT NULL AS __common_expr_1, ssci.customer_sk, csci.customer_sk +05)--------Full Join: ssci.customer_sk = csci.customer_sk, ssci.item_sk = csci.item_sk +06)----------SubqueryAlias: ssci +07)------------Projection: store_sales.ss_customer_sk AS customer_sk, store_sales.ss_item_sk AS item_sk +08)--------------Aggregate: groupBy=[[store_sales.ss_customer_sk, store_sales.ss_item_sk]], aggr=[[]] +09)----------------Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk +10)------------------LeftSemi Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +11)--------------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] +12)--------------------Projection: date_dim.d_date_sk +13)----------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +14)------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +15)----------SubqueryAlias: csci +16)------------Projection: catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk +17)--------------Aggregate: groupBy=[[catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk]], aggr=[[]] +18)----------------Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk +19)------------------LeftSemi Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk +20)--------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] +21)--------------------Projection: date_dim.d_date_sk +22)----------------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +23)------------------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +physical_plan +01)ProjectionExec: expr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END)@0 as store_only, sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@1 as catalog_only, sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@2 as store_and_catalog] +02)--GlobalLimitExec: skip=0, fetch=100 +03)----AggregateExec: mode=Final, gby=[], aggr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)] +04)------CoalescePartitionsExec +05)--------AggregateExec: mode=Partial, gby=[], aggr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)] +06)----------ProjectionExec: expr=[customer_sk@0 IS NOT NULL as __common_expr_1, customer_sk@0 as customer_sk, customer_sk@1 as customer_sk] +07)------------HashJoinExec: mode=CollectLeft, join_type=Full, on=[(customer_sk@0, customer_sk@0), (item_sk@1, item_sk@1)], projection=[customer_sk@2, customer_sk@0] +08)--------------CoalescePartitionsExec +09)----------------ProjectionExec: expr=[cs_bill_customer_sk@0 as customer_sk, cs_item_sk@1 as item_sk] +10)------------------AggregateExec: mode=FinalPartitioned, gby=[cs_bill_customer_sk@0 as cs_bill_customer_sk, cs_item_sk@1 as cs_item_sk], aggr=[] +11)--------------------RepartitionExec: partitioning=Hash([cs_bill_customer_sk@0, cs_item_sk@1], 4), input_partitions=4 +12)----------------------AggregateExec: mode=Partial, gby=[cs_bill_customer_sk@0 as cs_bill_customer_sk, cs_item_sk@1 as cs_item_sk], aggr=[] +13)------------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, cs_sold_date_sk@0)], projection=[cs_bill_customer_sk@1, cs_item_sk@2] +14)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +15)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk], file_type=vortex +16)--------------ProjectionExec: expr=[ss_customer_sk@0 as customer_sk, ss_item_sk@1 as item_sk] +17)----------------AggregateExec: mode=FinalPartitioned, gby=[ss_customer_sk@0 as ss_customer_sk, ss_item_sk@1 as ss_item_sk], aggr=[] +18)------------------RepartitionExec: partitioning=Hash([ss_customer_sk@0, ss_item_sk@1], 4), input_partitions=4 +19)--------------------AggregateExec: mode=Partial, gby=[ss_customer_sk@1 as ss_customer_sk, ss_item_sk@0 as ss_item_sk], aggr=[] +20)----------------------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2] +21)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +22)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q98.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q98.slt.no new file mode 100644 index 00000000000..363df4e7569 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q98.slt.no @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT i_item_id , + i_item_desc, + i_category, + i_class, + i_current_price , + sum(ss_ext_sales_price) AS itemrevenue, + sum(ss_ext_sales_price)*100.0000/sum(sum(ss_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM store_sales , + item, + date_dim +WHERE ss_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id , + i_item_desc, + i_category , + i_class , + i_current_price +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + revenueratio NULLS FIRST; +---- +logical_plan +01)Sort: item.i_category ASC NULLS FIRST, item.i_class ASC NULLS FIRST, item.i_item_id ASC NULLS FIRST, item.i_item_desc ASC NULLS FIRST, revenueratio ASC NULLS FIRST +02)--Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(store_sales.ss_ext_sales_price) AS itemrevenue, CAST(sum(store_sales.ss_ext_sales_price) AS Float64) * Float64(100) / CAST(sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS Float64) AS revenueratio +03)----WindowAggr: windowExpr=[[sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] +04)------Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(store_sales.ss_ext_sales_price)]] +05)--------Projection: store_sales.ss_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +06)----------Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk +07)------------Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category +08)--------------Inner Join: store_sales.ss_item_sk = item.i_item_sk +09)----------------TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] +10)----------------Filter: item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home") +11)------------------TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], partial_filters=[item.i_category = Utf8View("Sports") OR item.i_category = Utf8View("Books") OR item.i_category = Utf8View("Home")] +12)------------Projection: date_dim.d_date_sk +13)--------------Filter: date_dim.d_date >= Date32("1999-02-22") AND date_dim.d_date <= Date32("1999-03-24") +14)----------------TableScan: date_dim projection=[d_date_sk, d_date], partial_filters=[date_dim.d_date >= Date32("1999-02-22"), date_dim.d_date <= Date32("1999-03-24")] +physical_plan +01)SortPreservingMergeExec: [i_category@2 ASC, i_class@3 ASC, i_item_id@0 ASC, i_item_desc@1 ASC, revenueratio@6 ASC] +02)--SortExec: expr=[i_category@2 ASC, i_class@3 ASC, i_item_id@0 ASC, i_item_desc@1 ASC, revenueratio@6 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(store_sales.ss_ext_sales_price)@5 as itemrevenue, CAST(sum(store_sales.ss_ext_sales_price)@5 AS Float64) * 100 / CAST(sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 AS Float64) as revenueratio] +04)------WindowAggExec: wdw=[sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] +05)--------SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] +06)----------RepartitionExec: partitioning=Hash([i_class@3], 4), input_partitions=4 +07)------------AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(store_sales.ss_ext_sales_price)] +08)--------------RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 4), input_partitions=4 +09)----------------AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(store_sales.ss_ext_sales_price)] +10)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_ext_sales_price@2, i_item_id@3, i_item_desc@4, i_current_price@5, i_class@6, i_category@7] +11)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_date@2 >= 1999-02-22 AND d_date@2 <= 1999-03-24 +12)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[ss_sold_date_sk@6, ss_ext_sales_price@8, i_item_id@1, i_item_desc@2, i_current_price@3, i_class@4, i_category@5] +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], file_type=vortex, predicate: i_category@12 = Sports OR i_category@12 = Books OR i_category@12 = Home +14)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:], [${WORK_DIR}/store_sales.vortex:]]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q99.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q99.slt.no new file mode 100644 index 00000000000..b0b00892b0f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q99.slt.no @@ -0,0 +1,88 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN +SELECT w_substr , + sm_type , + LOWER(cc_name) cc_name_lower , + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 30) + AND (cs_ship_date_sk - cs_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 60) + AND (cs_ship_date_sk - cs_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 90) + AND (cs_ship_date_sk - cs_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM catalog_sales , + (SELECT SUBSTRING(w_warehouse_name,1,20) w_substr, * + FROM warehouse) AS sq1 , + ship_mode , + call_center , + date_dim +WHERE d_month_seq BETWEEN 1200 AND 1200 + 11 + AND cs_ship_date_sk = d_date_sk + AND cs_warehouse_sk = w_warehouse_sk + AND cs_ship_mode_sk = sm_ship_mode_sk + AND cs_call_center_sk = cc_call_center_sk +GROUP BY w_substr , + sm_type , + cc_name +ORDER BY w_substr NULLS FIRST, + sm_type NULLS FIRST, + cc_name_lower NULLS FIRST +LIMIT 100; +---- +logical_plan +01)Sort: sq1.w_substr ASC NULLS FIRST, ship_mode.sm_type ASC NULLS FIRST, cc_name_lower ASC NULLS FIRST, fetch=100 +02)--Projection: sq1.w_substr, ship_mode.sm_type, lower(call_center.cc_name) AS cc_name_lower, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days +03)----Aggregate: groupBy=[[sq1.w_substr, ship_mode.sm_type, call_center.cc_name]], aggr=[[sum(CASE WHEN __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] +04)------Projection: catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk AS __common_expr_1, sq1.w_substr, ship_mode.sm_type, call_center.cc_name +05)--------Inner Join: catalog_sales.cs_ship_date_sk = date_dim.d_date_sk +06)----------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, sq1.w_substr, ship_mode.sm_type, call_center.cc_name +07)------------Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk +08)--------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_call_center_sk, sq1.w_substr, ship_mode.sm_type +09)----------------Inner Join: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk +10)------------------Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_ship_mode_sk, sq1.w_substr +11)--------------------Inner Join: catalog_sales.cs_warehouse_sk = sq1.w_warehouse_sk +12)----------------------TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_call_center_sk, cs_ship_mode_sk, cs_warehouse_sk] +13)----------------------SubqueryAlias: sq1 +14)------------------------Projection: substr(warehouse.w_warehouse_name, Int64(1), Int64(20)) AS w_substr, warehouse.w_warehouse_sk +15)--------------------------TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] +16)------------------TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] +17)--------------TableScan: call_center projection=[cc_call_center_sk, cc_name] +18)----------Projection: date_dim.d_date_sk +19)------------Filter: date_dim.d_month_seq >= Int64(1200) AND date_dim.d_month_seq <= Int64(1211) +20)--------------TableScan: date_dim projection=[d_date_sk, d_month_seq], partial_filters=[date_dim.d_month_seq >= Int64(1200), date_dim.d_month_seq <= Int64(1211)] +physical_plan +01)SortPreservingMergeExec: [w_substr@0 ASC, sm_type@1 ASC, cc_name_lower@2 ASC], fetch=100 +02)--SortExec: TopK(fetch=100), expr=[w_substr@0 ASC, sm_type@1 ASC, cc_name_lower@2 ASC], preserve_partitioning=[true] +03)----ProjectionExec: expr=[w_substr@0 as w_substr, sm_type@1 as sm_type, lower(cc_name@2) as cc_name_lower, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@3 as 30 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@4 as 31-60 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@5 as 61-90 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@6 as 91-120 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@7 as >120 days] +04)------AggregateExec: mode=FinalPartitioned, gby=[w_substr@0 as w_substr, sm_type@1 as sm_type, cc_name@2 as cc_name], aggr=[sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +05)--------RepartitionExec: partitioning=Hash([w_substr@0, sm_type@1, cc_name@2], 4), input_partitions=4 +06)----------AggregateExec: mode=Partial, gby=[w_substr@1 as w_substr, sm_type@2 as sm_type, cc_name@3 as cc_name], aggr=[sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] +07)------------ProjectionExec: expr=[cs_ship_date_sk@0 - cs_sold_date_sk@1 as __common_expr_1, w_substr@2 as w_substr, sm_type@3 as sm_type, cc_name@4 as cc_name] +08)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(d_date_sk@0, cs_ship_date_sk@1)], projection=[cs_ship_date_sk@2, cs_sold_date_sk@1, w_substr@3, sm_type@4, cc_name@5] +09)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk], file_type=vortex, predicate: d_month_seq@3 >= 1200 AND d_month_seq@3 <= 1211 +10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(cc_call_center_sk@0, cs_call_center_sk@2)], projection=[cs_sold_date_sk@2, cs_ship_date_sk@3, w_substr@5, sm_type@6, cc_name@1] +11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/call_center.vortex]]}, projection=[cc_call_center_sk, cc_name], file_type=vortex +12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(sm_ship_mode_sk@0, cs_ship_mode_sk@3)], projection=[cs_sold_date_sk@2, cs_ship_date_sk@3, cs_call_center_sk@4, w_substr@6, sm_type@1] +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/ship_mode.vortex]]}, projection=[sm_ship_mode_sk, sm_type], file_type=vortex +14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(w_warehouse_sk@1, cs_warehouse_sk@4)], projection=[cs_sold_date_sk@2, cs_ship_date_sk@3, cs_call_center_sk@4, cs_ship_mode_sk@5, w_substr@0] +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/warehouse.vortex]]}, projection=[substr(w_warehouse_name@2, 1, 20) as w_substr, w_warehouse_sk], file_type=vortex +16)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:], [${WORK_DIR}/catalog_sales.vortex:]]}, projection=[cs_sold_date_sk, cs_ship_date_sk, cs_call_center_sk, cs_ship_mode_sk, cs_warehouse_sk], file_type=vortex diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/tpcds.slt b/vortex-sqllogictest/slt/tpcds/datafusion/tpcds.slt new file mode 100644 index 00000000000..47171d641ce --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/datafusion/tpcds.slt @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +include ../../setup.slt.no + +let FILE_FORMAT +SELECT 'vortex'; + +include ./create.slt.no +include ./plans/*.slt.no +include ./drop.slt.no diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/create.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/create.slt.no new file mode 100644 index 00000000000..583d4c797f5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/create.slt.no @@ -0,0 +1,74 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +statement ok +CREATE VIEW call_center AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/call_center.${FILE_FORMAT}'); + +statement ok +CREATE VIEW catalog_page AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/catalog_page.${FILE_FORMAT}'); + +statement ok +CREATE VIEW catalog_returns AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/catalog_returns.${FILE_FORMAT}'); + +statement ok +CREATE VIEW catalog_sales AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/catalog_sales.${FILE_FORMAT}'); + +statement ok +CREATE VIEW customer AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/customer.${FILE_FORMAT}'); + +statement ok +CREATE VIEW customer_address AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/customer_address.${FILE_FORMAT}'); + +statement ok +CREATE VIEW customer_demographics AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/customer_demographics.${FILE_FORMAT}'); + +statement ok +CREATE VIEW date_dim AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/date_dim.${FILE_FORMAT}'); + +statement ok +CREATE VIEW household_demographics AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/household_demographics.${FILE_FORMAT}'); + +statement ok +CREATE VIEW income_band AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/income_band.${FILE_FORMAT}'); + +statement ok +CREATE VIEW inventory AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/inventory.${FILE_FORMAT}'); + +statement ok +CREATE VIEW item AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/item.${FILE_FORMAT}'); + +statement ok +CREATE VIEW promotion AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/promotion.${FILE_FORMAT}'); + +statement ok +CREATE VIEW reason AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/reason.${FILE_FORMAT}'); + +statement ok +CREATE VIEW ship_mode AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/ship_mode.${FILE_FORMAT}'); + +statement ok +CREATE VIEW store AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/store.${FILE_FORMAT}'); + +statement ok +CREATE VIEW store_returns AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/store_returns.${FILE_FORMAT}'); + +statement ok +CREATE VIEW store_sales AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/store_sales.${FILE_FORMAT}'); + +statement ok +CREATE VIEW time_dim AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/time_dim.${FILE_FORMAT}'); + +statement ok +CREATE VIEW warehouse AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/warehouse.${FILE_FORMAT}'); + +statement ok +CREATE VIEW web_page AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/web_page.${FILE_FORMAT}'); + +statement ok +CREATE VIEW web_returns AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/web_returns.${FILE_FORMAT}'); + +statement ok +CREATE VIEW web_sales AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/web_sales.${FILE_FORMAT}'); + +statement ok +CREATE VIEW web_site AS SELECT * FROM read_${FILE_FORMAT}('slt/tpcds/data/web_site.${FILE_FORMAT}'); diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/drop.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/drop.slt.no new file mode 100644 index 00000000000..906b4f25193 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/drop.slt.no @@ -0,0 +1,74 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +statement ok +DROP VIEW web_site; + +statement ok +DROP VIEW web_sales; + +statement ok +DROP VIEW web_returns; + +statement ok +DROP VIEW web_page; + +statement ok +DROP VIEW warehouse; + +statement ok +DROP VIEW time_dim; + +statement ok +DROP VIEW store_sales; + +statement ok +DROP VIEW store_returns; + +statement ok +DROP VIEW store; + +statement ok +DROP VIEW ship_mode; + +statement ok +DROP VIEW reason; + +statement ok +DROP VIEW promotion; + +statement ok +DROP VIEW item; + +statement ok +DROP VIEW inventory; + +statement ok +DROP VIEW income_band; + +statement ok +DROP VIEW household_demographics; + +statement ok +DROP VIEW date_dim; + +statement ok +DROP VIEW customer_demographics; + +statement ok +DROP VIEW customer_address; + +statement ok +DROP VIEW customer; + +statement ok +DROP VIEW catalog_sales; + +statement ok +DROP VIEW catalog_returns; + +statement ok +DROP VIEW catalog_page; + +statement ok +DROP VIEW call_center; diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/parity.slt b/vortex-sqllogictest/slt/tpcds/duckdb/parity.slt new file mode 100644 index 00000000000..437b1004783 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/parity.slt @@ -0,0 +1,536 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +# Checks that every Vortex table produced by generate_data.sh holds exactly the +# same rows as the Parquet table it was converted from. generate_data.sh runs +# this file right after the conversion, and it also runs as part of the suite. + +include ../../setup.slt.no + +# call_center +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/call_center.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/call_center.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/call_center.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/call_center.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/call_center.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/call_center.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/call_center.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/call_center.parquet')); +---- +0 + +# catalog_page +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/catalog_page.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/catalog_page.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/catalog_page.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/catalog_page.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/catalog_page.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/catalog_page.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/catalog_page.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/catalog_page.parquet')); +---- +0 + +# catalog_returns +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/catalog_returns.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/catalog_returns.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/catalog_returns.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/catalog_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/catalog_returns.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/catalog_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/catalog_returns.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/catalog_returns.parquet')); +---- +0 + +# catalog_sales +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/catalog_sales.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/catalog_sales.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/catalog_sales.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/catalog_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/catalog_sales.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/catalog_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/catalog_sales.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/catalog_sales.parquet')); +---- +0 + +# customer +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/customer.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/customer.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/customer.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/customer.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/customer.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/customer.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/customer.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/customer.parquet')); +---- +0 + +# customer_address +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/customer_address.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/customer_address.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/customer_address.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/customer_address.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/customer_address.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/customer_address.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/customer_address.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/customer_address.parquet')); +---- +0 + +# customer_demographics +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/customer_demographics.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/customer_demographics.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/customer_demographics.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/customer_demographics.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/customer_demographics.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/customer_demographics.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/customer_demographics.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/customer_demographics.parquet')); +---- +0 + +# date_dim +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/date_dim.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/date_dim.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/date_dim.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/date_dim.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/date_dim.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/date_dim.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/date_dim.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/date_dim.parquet')); +---- +0 + +# household_demographics +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/household_demographics.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/household_demographics.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/household_demographics.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/household_demographics.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/household_demographics.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/household_demographics.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/household_demographics.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/household_demographics.parquet')); +---- +0 + +# income_band +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/income_band.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/income_band.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/income_band.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/income_band.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/income_band.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/income_band.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/income_band.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/income_band.parquet')); +---- +0 + +# inventory +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/inventory.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/inventory.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/inventory.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/inventory.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/inventory.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/inventory.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/inventory.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/inventory.parquet')); +---- +0 + +# item +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/item.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/item.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/item.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/item.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/item.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/item.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/item.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/item.parquet')); +---- +0 + +# promotion +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/promotion.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/promotion.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/promotion.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/promotion.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/promotion.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/promotion.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/promotion.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/promotion.parquet')); +---- +0 + +# reason +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/reason.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/reason.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/reason.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/reason.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/reason.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/reason.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/reason.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/reason.parquet')); +---- +0 + +# ship_mode +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/ship_mode.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/ship_mode.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/ship_mode.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/ship_mode.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/ship_mode.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/ship_mode.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/ship_mode.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/ship_mode.parquet')); +---- +0 + +# store +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/store.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/store.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/store.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/store.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/store.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/store.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/store.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/store.parquet')); +---- +0 + +# store_returns +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/store_returns.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/store_returns.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/store_returns.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/store_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/store_returns.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/store_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/store_returns.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/store_returns.parquet')); +---- +0 + +# store_sales +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/store_sales.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/store_sales.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/store_sales.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/store_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/store_sales.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/store_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/store_sales.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/store_sales.parquet')); +---- +0 + +# time_dim +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/time_dim.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/time_dim.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/time_dim.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/time_dim.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/time_dim.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/time_dim.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/time_dim.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/time_dim.parquet')); +---- +0 + +# warehouse +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/warehouse.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/warehouse.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/warehouse.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/warehouse.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/warehouse.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/warehouse.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/warehouse.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/warehouse.parquet')); +---- +0 + +# web_page +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/web_page.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/web_page.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/web_page.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/web_page.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/web_page.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/web_page.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/web_page.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/web_page.parquet')); +---- +0 + +# web_returns +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/web_returns.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/web_returns.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/web_returns.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/web_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/web_returns.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/web_returns.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/web_returns.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/web_returns.parquet')); +---- +0 + +# web_sales +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/web_sales.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/web_sales.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/web_sales.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/web_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/web_sales.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/web_sales.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/web_sales.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/web_sales.parquet')); +---- +0 + +# web_site +query TT rowsort +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_parquet('slt/tpcds/data/web_site.parquet')) +EXCEPT +SELECT column_name, column_type FROM (DESCRIBE SELECT * FROM read_vortex('slt/tpcds/data/web_site.vortex')); +---- + +query I +SELECT (SELECT COUNT(*) FROM read_parquet('slt/tpcds/data/web_site.parquet')) - (SELECT COUNT(*) FROM read_vortex('slt/tpcds/data/web_site.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_parquet('slt/tpcds/data/web_site.parquet') EXCEPT ALL SELECT * FROM read_vortex('slt/tpcds/data/web_site.vortex')); +---- +0 + +query I +SELECT COUNT(*) FROM (SELECT * FROM read_vortex('slt/tpcds/data/web_site.vortex') EXCEPT ALL SELECT * FROM read_parquet('slt/tpcds/data/web_site.parquet')); +---- +0 diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q1.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q1.slt.no new file mode 100644 index 00000000000..6cfe866fb9d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q1.slt.no @@ -0,0 +1,890 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH customer_total_return AS + (SELECT sr_customer_sk AS ctr_customer_sk, + sr_store_sk AS ctr_store_sk, + sum(sr_return_amt) AS ctr_total_return + FROM store_returns, + date_dim + WHERE sr_returned_date_sk = d_date_sk + AND d_year = 2000 + GROUP BY sr_customer_sk, + sr_store_sk) +SELECT c_customer_id +FROM customer_total_return ctr1, + store, + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk) + AND s_store_sk = ctr1.ctr_store_sk + AND s_state = 'TN' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(sr_returned_date_sk = d_date_sk)", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "sr_customer_sk", + "sr_store_sk" + ], + "Expressions": "sum(sr_return_amt)" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_store_sk", + "ctr_total_return" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "(ctr_store_sk = ctr_store_sk)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ctr_total_return)" + } + } + ], + "extra_info": { + "Expressions": "(avg(ctr_total_return) * CAST(1.2 AS DOUBLE))" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "(s_store_sk = ctr_store_sk)", + "(s_state = CAST('TN' AS VARCHAR))", + "(ctr_customer_sk = c_customer_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": "c_customer_id" + } + } + ], + "extra_info": { + "Order By": "memory.main.customer.c_customer_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_customer_sk", + "sr_store_sk", + "sr_return_amt" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450821)" + ], + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Groups": [ + "sr_customer_sk", + "sr_store_sk" + ], + "Expressions": "sum(sr_return_amt)", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_store_sk", + "ctr_total_return" + ], + "Estimated Cardinality": "5712" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "5712" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_state = \"TN\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ctr_store_sk = s_store_sk)", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ctr_customer_sk)", + "Estimated Cardinality": "5712" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "5712" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "5177" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ctr_store_sk = ctr_store_sk)", + "Estimated Cardinality": "1034" + } + } + ], + "extra_info": { + "Groups": "ctr_store_sk", + "Expressions": "avg(ctr_total_return)", + "Estimated Cardinality": "517" + } + } + ], + "extra_info": { + "Expressions": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_store_sk" + ], + "Estimated Cardinality": "517" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(ctr_store_sk IS NOT DISTINCT FROM ctr_store_sk)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Expressions": "c_customer_id", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_customer_sk", + "sr_store_sk", + "sr_return_amt" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450821)" + ], + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Projections": [ + "sr_customer_sk", + "sr_store_sk", + "sr_return_amt" + ], + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "5712" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "5712" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_state='TN'", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ctr_store_sk = s_store_sk", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ctr_customer_sk", + "Estimated Cardinality": "5712" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "5712" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "5177" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ctr_store_sk = ctr_store_sk", + "Estimated Cardinality": "1034" + } + } + ], + "extra_info": { + "Projections": [ + "ctr_store_sk", + "ctr_total_return" + ], + "Estimated Cardinality": "1034" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "517" + } + } + ], + "extra_info": { + "Projections": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_store_sk" + ], + "Estimated Cardinality": "517" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_store_sk IS NOT DISTINCT FROM ctr_store_sk", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#1", + "Aggregates": "", + "Estimated Cardinality": "5177" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_store_sk IS NOT DISTINCT FROM ctr_store_sk", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "5712" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.customer.c_customer_id ASC" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q10.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q10.slt.no new file mode 100644 index 00000000000..09de4e841c9 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q10.slt.no @@ -0,0 +1,1785 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3, + cd_dep_count, + count(*) cnt4, + cd_dep_employed_count, + count(*) cnt5, + cd_dep_college_count, + count(*) cnt6 +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND ca_county IN ('Rush County', + 'Toole County', + 'Jefferson County', + 'Dona Ana County', + 'La Porte County') + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3) + AND (EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3) + OR EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_moy BETWEEN 1 AND 1+3)) +GROUP BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +ORDER BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_moy >= CAST(1 AS BIGINT))", + "(d_moy <= CAST((1 + 3) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_moy >= CAST(1 AS BIGINT))", + "(d_moy <= CAST((1 + 3) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = cs_ship_customer_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_moy >= CAST(1 AS BIGINT))", + "(d_moy <= CAST((1 + 3) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_current_addr_sk = ca_address_sk)", + "(ca_county IN (CAST('Rush County' AS VARCHAR), CAST('Toole County' AS VARCHAR), CAST('Jefferson County' AS VARCHAR), CAST('Dona Ana County' AS VARCHAR), CAST('La Porte County' AS VARCHAR)))", + "(cd_demo_sk = c_current_cdemo_sk)", + "SUBQUERY", + "(SUBQUERY OR SUBQUERY)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3", + "cd_dep_count", + "cnt4", + "cd_dep_employed_count", + "cnt5", + "cd_dep_college_count", + "cnt6" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer_demographics.cd_gender", + "memory.main.customer_demographics.cd_marital_status", + "memory.main.customer_demographics.cd_education_status", + "memory.main.customer_demographics.cd_purchase_estimate", + "memory.main.customer_demographics.cd_credit_rating", + "memory.main.customer_demographics.cd_dep_count", + "memory.main.customer_demographics.cd_dep_employed_count", + "memory.main.customer_demographics.cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Rush County\", \"Toole County\", \"Jefferson County\", \"Dona Ana County\", \"La Porte County\"], $.ca_county)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "192080" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "(1i64 <= $.d_moy <= 4i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "(1i64 <= $.d_moy <= 4i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "(1i64 <= $.d_moy <= 4i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_customer_sk = c_customer_sk)", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)" + } + } + ], + "extra_info": { + "Expressions": "(SUBQUERY OR SUBQUERY)", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 500)", + "#4", + "__internal_compress_integral_utinyint(#5, 0)", + "__internal_compress_integral_utinyint(#6, 0)", + "__internal_compress_integral_utinyint(#7, 0)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Groups": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Expressions": "count_star()", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 500)", + "#4", + "__internal_decompress_integral_bigint(#5, 0)", + "__internal_decompress_integral_bigint(#6, 0)", + "__internal_decompress_integral_integer(#7, 0)", + "#8" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3", + "cd_dep_count", + "cnt4", + "cd_dep_employed_count", + "cnt5", + "cd_dep_college_count", + "cnt6" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Rush County\", \"Toole County\", \"Jefferson County\", \"Dona Ana County\", \"La Porte County\"], $.ca_county)", + "Projections": "ca_address_sk", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#8", + "Aggregates": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416", + "Delim Index": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "2", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#8", + "Aggregates": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416", + "Delim Index": "2" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "3", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_customer_sk = c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#8", + "Aggregates": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "0", + "Delim Index": "3" + } + } + ], + "extra_info": { + "Expression": "(SUBQUERY OR SUBQUERY)", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 500)", + "#4", + "__internal_compress_integral_utinyint(#5, 0)", + "__internal_compress_integral_utinyint(#6, 0)", + "__internal_compress_integral_utinyint(#7, 0)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "count_star()", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 500)", + "#4", + "__internal_decompress_integral_bigint(#5, 0)", + "__internal_decompress_integral_bigint(#6, 0)", + "__internal_decompress_integral_integer(#7, 0)", + "#8" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3", + "cd_dep_count", + "cnt4", + "cd_dep_employed_count", + "cnt5", + "cd_dep_college_count", + "cnt6" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer_demographics.cd_gender ASC", + "memory.main.customer_demographics.cd_marital_status ASC", + "memory.main.customer_demographics.cd_education_status ASC", + "memory.main.customer_demographics.cd_purchase_estimate ASC", + "memory.main.customer_demographics.cd_credit_rating ASC", + "memory.main.customer_demographics.cd_dep_count ASC", + "memory.main.customer_demographics.cd_dep_employed_count ASC", + "memory.main.customer_demographics.cd_dep_college_count ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q11.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q11.slt.no new file mode 100644 index 00000000000..1952b86551c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q11.slt.no @@ -0,0 +1,1739 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(ss_ext_list_price-ss_ext_discount_amt) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(ws_ext_list_price-ws_ext_discount_amt) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name, + t_s_secyear.customer_preferred_cust_flag +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.dyear = 2001 + AND t_s_secyear.dyear = 2001+1 + AND t_w_firstyear.dyear = 2001 + AND t_w_secyear.dyear = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_w_firstyear.year_total > 0 THEN (t_w_secyear.year_total*1.0000) / t_w_firstyear.year_total + ELSE 0.0 + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN (t_s_secyear.year_total*1.0000) / t_s_firstyear.year_total + ELSE 0.0 + END +ORDER BY t_s_secyear.customer_id NULLS FIRST, + t_s_secyear.customer_first_name NULLS FIRST, + t_s_secyear.customer_last_name NULLS FIRST, + t_s_secyear.customer_preferred_cust_flag NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((ss_ext_list_price - ss_ext_discount_amt))" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "customer_birth_country", + "customer_login", + "customer_email_address", + "dyear", + "year_total", + "sale_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((ws_ext_list_price - ws_ext_discount_amt))" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "customer_birth_country", + "customer_login", + "customer_email_address", + "dyear", + "year_total", + "sale_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(dyear = CAST(2001 AS BIGINT))", + "(dyear = CAST((2001 + 1) AS BIGINT))", + "(dyear = CAST(2001 AS BIGINT))", + "(dyear = CAST((2001 + 1) AS BIGINT))", + "(year_total > CAST(0 AS DECIMAL(38,2)))", + "(year_total > CAST(0 AS DECIMAL(38,2)))", + "(CASE WHEN ((year_total > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((year_total * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE CAST(0.0 AS DOUBLE) END > CASE WHEN ((year_total > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((year_total * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE CAST(0.0 AS DOUBLE) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag" + ] + } + } + ], + "extra_info": { + "Order By": [ + "t_s_secyear.customer_id", + "t_s_secyear.customer_first_name", + "t_s_secyear.customer_last_name", + "t_s_secyear.customer_preferred_cust_flag" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_discount_amt", + "ss_ext_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((ss_ext_list_price - ss_ext_discount_amt))", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_ext_discount_amt", + "ws_ext_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((ws_ext_list_price - ws_ext_discount_amt))", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ] + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2001)", + "(year_total > 0.00)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2002)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "518659" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2001)", + "(year_total > 0.00)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2002)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "518659" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(customer_id = customer_id)", + "(CASE WHEN ((year_total > 0.00)) THEN ((CAST((year_total * 1.0000) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE 0.0 END < CASE WHEN ((year_total > 0.00)) THEN ((CAST((year_total * 1.0000) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE 0.0 END)" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_discount_amt", + "ss_ext_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year", + "(ss_ext_list_price - ss_ext_discount_amt)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#7", + "#8" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_ext_discount_amt", + "ws_ext_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year", + "(ws_ext_list_price - ws_ext_discount_amt)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#7", + "#8" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": {} + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2001) AND (year_total > 0.00) AND (sale_type = 's'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) AND (sale_type = 's'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#5" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "518659" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2001) AND (year_total > 0.00) AND (sale_type = 'w'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) AND (sale_type = 'w'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "518659" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "customer_id = customer_id", + "CASE WHEN ((year_total > 0.00)) THEN ((CAST((year_total * 1.0000) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE 0.0 END < CASE WHEN ((year_total > 0.00)) THEN ((CAST((year_total * 1.0000) AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE 0.0 END" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "t_s_secyear.customer_id ASC", + "t_s_secyear.customer_first_name ASC", + "t_s_secyear.customer_last_name ASC", + "t_s_secyear.customer_preferred_cust_flag ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q12.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q12.slt.no new file mode 100644 index 00000000000..7167dd1ab5d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q12.slt.no @@ -0,0 +1,606 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + i_item_desc, + i_category, + i_class, + i_current_price, + sum(ws_ext_sales_price) AS itemrevenue, + sum(ws_ext_sales_price)*100.0000/sum(sum(ws_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM web_sales, + item, + date_dim +WHERE ws_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id, + i_item_desc, + i_category, + i_class, + i_current_price +ORDER BY i_category, + i_class, + i_item_id, + i_item_desc, + revenueratio +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_item_sk = i_item_sk)", + "(i_category IN (CAST('Sports' AS VARCHAR), CAST('Books' AS VARCHAR), CAST('Home' AS VARCHAR)))", + "(ws_sold_date_sk = d_date_sk)", + "(d_date >= CAST('1999-02-22' AS DATE))", + "(d_date <= CAST('1999-03-24' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ws_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_category", + "memory.main.item.i_class", + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "((sum(memory.main.web_sales.ws_ext_sales_price) * 100.0000) / sum(sum(memory.main.web_sales.ws_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class))" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450816)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ws_ext_sales_price)) OVER (PARTITION BY i_class)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450816)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "sum(#5)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": "sum(sum(ws_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.item.i_category ASC", + "memory.main.item.i_class ASC", + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "((sum(memory.main.web_sales.ws_ext_sales_price) * 100.0000) / sum(sum(memory.main.web_sales.ws_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class)) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q13.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q13.slt.no new file mode 100644 index 00000000000..5e794eac6a6 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q13.slt.no @@ -0,0 +1,775 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT avg(ss_quantity) avg1, + avg(ss_ext_sales_price) avg2, + avg(ss_ext_wholesale_cost) avg3, + sum(ss_ext_wholesale_cost) +FROM store_sales , + store , + customer_demographics , + household_demographics , + customer_address , + date_dim +WHERE s_store_sk = ss_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 and((ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'M' + AND cd_education_status = 'Advanced Degree' + AND ss_sales_price BETWEEN 100.00 AND 150.00 + AND hd_dep_count = 3) + OR (ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND ss_sales_price BETWEEN 50.00 AND 100.00 + AND hd_dep_count = 1 ) + OR (ss_hdemo_sk=hd_demo_sk + AND cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'W' + AND cd_education_status = '2 yr Degree' + AND ss_sales_price BETWEEN 150.00 AND 200.00 + AND hd_dep_count = 1)) and((ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('TX', 'OH', 'TX') + AND ss_net_profit BETWEEN 100 AND 200) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('OR', 'NM', 'KY') + AND ss_net_profit BETWEEN 150 AND 300) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('VA', 'TX', 'MS') + AND ss_net_profit BETWEEN 50 AND 250)) ; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(s_store_sk = ss_store_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(((ss_hdemo_sk = hd_demo_sk) AND (cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('M' AS VARCHAR)) AND (cd_education_status = CAST('Advanced Degree' AS VARCHAR)) AND ((ss_sales_price >= CAST(100.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(150.00 AS DECIMAL(7,2)))) AND (hd_dep_count = CAST(3 AS BIGINT))) OR ((ss_hdemo_sk = hd_demo_sk) AND (cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('S' AS VARCHAR)) AND (cd_education_status = CAST('College' AS VARCHAR)) AND ((ss_sales_price >= CAST(50.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(100.00 AS DECIMAL(7,2)))) AND (hd_dep_count = CAST(1 AS BIGINT))) OR ((ss_hdemo_sk = hd_demo_sk) AND (cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('W' AS VARCHAR)) AND (cd_education_status = CAST('2 yr Degree' AS VARCHAR)) AND ((ss_sales_price >= CAST(150.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(200.00 AS DECIMAL(7,2)))) AND (hd_dep_count = CAST(1 AS BIGINT))))", + "(((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('TX' AS VARCHAR), CAST('OH' AS VARCHAR), CAST('TX' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(100 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(200 AS DECIMAL(12,2))))) OR ((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('OR' AS VARCHAR), CAST('NM' AS VARCHAR), CAST('KY' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(150 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(300 AS DECIMAL(12,2))))) OR ((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('VA' AS VARCHAR), CAST('TX' AS VARCHAR), CAST('MS' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(50 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(250 AS DECIMAL(12,2))))))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_quantity)", + "avg(ss_ext_sales_price)", + "avg(ss_ext_wholesale_cost)", + "sum(ss_ext_wholesale_cost)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "avg1", + "avg2", + "avg3", + "sum(ss_ext_wholesale_cost)" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_country = \"United States\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": "((((ss_net_profit >= 100.00) AND (ss_net_profit <= 200.00)) AND ((ca_state = 'TX') OR (ca_state = 'OH') OR (ca_state = 'TX'))) OR (((ss_net_profit >= 150.00) AND (ss_net_profit <= 300.00)) AND ((ca_state = 'OR') OR (ca_state = 'NM') OR (ca_state = 'KY'))) OR (((ss_net_profit >= 50.00) AND (ss_net_profit <= 250.00)) AND ((ca_state = 'VA') OR (ca_state = 'TX') OR (ca_state = 'MS'))))", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = ss_cdemo_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_dep_count" + ], + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": "(((hd_dep_count = 3) AND ((ss_sales_price >= 100.00) AND (ss_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = 'Advanced Degree')) OR ((hd_dep_count = 1) AND ((ss_sales_price >= 50.00) AND (ss_sales_price <= 100.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')) OR ((hd_dep_count = 1) AND ((ss_sales_price >= 150.00) AND (ss_sales_price <= 200.00)) AND (cd_marital_status = 'W') AND (cd_education_status = '2 yr Degree')))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_quantity)", + "avg(ss_ext_sales_price)", + "avg(ss_ext_wholesale_cost)", + "sum(ss_ext_wholesale_cost)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "avg1", + "avg2", + "avg3", + "sum(ss_ext_wholesale_cost)" + ], + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_country='United States'", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expression": "((((ss_net_profit >= 100.00) AND (ss_net_profit <= 200.00)) AND ((ca_state = 'TX') OR (ca_state = 'OH') OR (ca_state = 'TX'))) OR (((ss_net_profit >= 150.00) AND (ss_net_profit <= 300.00)) AND ((ca_state = 'OR') OR (ca_state = 'NM') OR (ca_state = 'KY'))) OR (((ss_net_profit >= 50.00) AND (ss_net_profit <= 250.00)) AND ((ca_state = 'VA') OR (ca_state = 'TX') OR (ca_state = 'MS'))))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = ss_cdemo_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "hd_demo_sk", + "hd_dep_count" + ], + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expression": "(((hd_dep_count = 3) AND ((ss_sales_price >= 100.00) AND (ss_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = 'Advanced Degree')) OR ((hd_dep_count = 1) AND ((ss_sales_price >= 50.00) AND (ss_sales_price <= 100.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')) OR ((hd_dep_count = 1) AND ((ss_sales_price >= 150.00) AND (ss_sales_price <= 200.00)) AND (cd_marital_status = 'W') AND (cd_education_status = '2 yr Degree')))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#2", + "#4", + "#5" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "ss_quantity", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_wholesale_cost" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "avg(#1)", + "avg(#2)", + "sum(#3)" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q14.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q14.slt.no new file mode 100644 index 00000000000..9585cd9a3b5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q14.slt.no @@ -0,0 +1,4778 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH cross_items AS + (SELECT i_item_sk ss_item_sk + FROM item, + (SELECT iss.i_brand_id brand_id, + iss.i_class_id class_id, + iss.i_category_id category_id + FROM store_sales, + item iss, + date_dim d1 + WHERE ss_item_sk = iss.i_item_sk + AND ss_sold_date_sk = d1.d_date_sk + AND d1.d_year BETWEEN 1999 AND 1999 + 2 INTERSECT + SELECT ics.i_brand_id, + ics.i_class_id, + ics.i_category_id + FROM catalog_sales, + item ics, + date_dim d2 WHERE cs_item_sk = ics.i_item_sk + AND cs_sold_date_sk = d2.d_date_sk + AND d2.d_year BETWEEN 1999 AND 1999 + 2 INTERSECT + SELECT iws.i_brand_id, + iws.i_class_id, + iws.i_category_id + FROM web_sales, + item iws, + date_dim d3 WHERE ws_item_sk = iws.i_item_sk + AND ws_sold_date_sk = d3.d_date_sk + AND d3.d_year BETWEEN 1999 AND 1999 + 2) sq1 + WHERE i_brand_id = brand_id + AND i_class_id = class_id + AND i_category_id = category_id ), + avg_sales AS + (SELECT avg(quantity*list_price) average_sales + FROM + (SELECT ss_quantity quantity, + ss_list_price list_price + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2 + UNION ALL SELECT cs_quantity quantity, + cs_list_price list_price + FROM catalog_sales, + date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2 + UNION ALL SELECT ws_quantity quantity, + ws_list_price list_price + FROM web_sales, + date_dim + WHERE ws_sold_date_sk = d_date_sk + AND d_year BETWEEN 1999 AND 1999 + 2) sq2) +SELECT channel, + i_brand_id, + i_class_id, + i_category_id, + sum(sales) AS sum_sales, + sum(number_sales) AS sum_number_sales +FROM + (SELECT 'store' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(ss_quantity*ss_list_price) sales, + count(*) number_sales + FROM store_sales, + item, + date_dim + WHERE ss_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(ss_quantity*ss_list_price) > + (SELECT average_sales + FROM avg_sales) + UNION ALL SELECT 'catalog' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(cs_quantity*cs_list_price) sales, + count(*) number_sales + FROM catalog_sales, + item, + date_dim + WHERE cs_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(cs_quantity*cs_list_price) > + (SELECT average_sales + FROM avg_sales) + UNION ALL SELECT 'web' channel, + i_brand_id, + i_class_id, + i_category_id, + sum(ws_quantity*ws_list_price) sales, + count(*) number_sales + FROM web_sales, + item, + date_dim + WHERE ws_item_sk IN + (SELECT ss_item_sk + FROM cross_items) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1999+2 + AND d_moy = 11 + GROUP BY i_brand_id, + i_class_id, + i_category_id + HAVING sum(ws_quantity*ws_list_price) > + (SELECT average_sales + FROM avg_sales)) y +GROUP BY ROLLUP (channel, + i_brand_id, + i_class_id, + i_category_id) +ORDER BY channel NULLS FIRST, + i_brand_id NULLS FIRST, + i_class_id NULLS FIRST, + i_category_id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "class_id", + "category_id" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "brand_id", + "class_id", + "category_id" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_item_sk = i_item_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "brand_id", + "class_id", + "category_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_brand_id = brand_id)", + "(i_class_id = class_id)", + "(i_category_id = category_id)" + ] + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(d_year >= CAST(1999 AS BIGINT))", + "(d_year <= CAST((1999 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg((CAST(quantity AS DECIMAL(26,0)) * CAST(list_price AS DECIMAL(26,2))))" + } + } + ], + "extra_info": { + "Expressions": "average_sales" + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(ss_item_sk = #[127.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST((1999 + 2) AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2))))", + "count_star()" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[201.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[208.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[208.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(cs_item_sk = #[239.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST((1999 + 2) AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2))))", + "count_star()" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[246.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[253.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[253.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(ws_item_sk = #[284.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ws_item_sk = i_item_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST((1999 + 2) AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2))))", + "count_star()" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[291.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[298.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[298.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum(sales)", + "sum(number_sales)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sum_sales", + "sum_number_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "y.channel", + "y.i_brand_id", + "y.i_class_id", + "y.i_category_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "avg_sales", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "cross_items", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "class_id", + "category_id" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657", + "Distinct Targets": [ + "brand_id", + "class_id", + "category_id" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632", + "Distinct Targets": [ + "brand_id", + "class_id", + "category_id" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(brand_id = i_brand_id)", + "(class_id = i_class_id)", + "(category_id = i_category_id)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_quantity", + "ss_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "503753" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg((CAST(quantity AS DECIMAL(26,0)) * CAST(list_price AS DECIMAL(26,2))))", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales", + "Estimated Cardinality": "1" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_quantity", + "ss_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 11i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(ss_item_sk = #0)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 2450816)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450816)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2))))", + "count_star()" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 11i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "(#0 = cs_item_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 2450815)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450815)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2))))", + "count_star()" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "5743" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(CAST(sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "5743" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 11i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "(#0 = ws_item_sk)", + "Estimated Cardinality": "2864" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 2450816)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450816)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2))))", + "count_star()" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "2864" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "average_sales", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(CAST(sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "20141" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Expressions": [ + "sum(sales)", + "sum(number_sales)" + ], + "Estimated Cardinality": "20140" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sum_sales", + "sum_number_sales" + ], + "Estimated Cardinality": "20140" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "avg_sales", + "Table Index": "1", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "cross_items", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "class_id", + "category_id" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "class_id", + "category_id" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "class_id", + "category_id" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "brand_id = i_brand_id", + "class_id = i_class_id", + "category_id = i_category_id" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": "ss_item_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_quantity", + "ss_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999i64 <= $.d_year <= 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "quantity", + "list_price" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": "(CAST(quantity AS DECIMAL(26,0)) * CAST(list_price AS DECIMAL(26,2)))", + "Estimated Cardinality": "503753" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_quantity", + "ss_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "ss_item_sk = #0", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 2450816)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450816)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand_id", + "i_class_id", + "i_category_id", + "(CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "count_star()" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "#0 = cs_item_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 2450815)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450815)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand_id", + "i_class_id", + "i_category_id", + "(CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "count_star()" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "5743" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "CAST(sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY", + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "5743" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "71632" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "#0 = ws_item_sk", + "Estimated Cardinality": "2864" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 2450816)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 2450816)", + "__internal_compress_integral_usmallint(#5, 1)", + "__internal_compress_integral_uinteger(#6, 1001001)", + "__internal_compress_integral_utinyint(#7, 1)", + "__internal_compress_integral_utinyint(#8, 1)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand_id", + "i_class_id", + "i_category_id", + "(CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "count_star()" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "2864" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "CAST(sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2)))) AS DOUBLE) > SUBQUERY", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "channel", + "i_brand_id", + "i_class_id", + "i_category_id", + "sales", + "number_sales" + ], + "Estimated Cardinality": "20141" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "20140" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "y.channel ASC", + "y.i_brand_id ASC", + "y.i_class_id ASC", + "y.i_category_id ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "avg_sales", + "Table Index": "1", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "cross_items", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q15.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q15.slt.no new file mode 100644 index 00000000000..9729f724c9e --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q15.slt.no @@ -0,0 +1,639 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT ca_zip, + sum(cs_sales_price) +FROM catalog_sales, + customer, + customer_address, + date_dim +WHERE cs_bill_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND (SUBSTRING(ca_zip, 1, 5) IN ('85669', + '86197', + '88274', + '83405', + '86475', + '85392', + '85460', + '80348', + '81792') + OR ca_state IN ('CA', + 'WA', + 'GA') + OR cs_sales_price > 500) + AND cs_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 2001 +GROUP BY ca_zip +ORDER BY ca_zip NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_bill_customer_sk = c_customer_sk)", + "(c_current_addr_sk = ca_address_sk)", + "((\"substring\"(ca_zip, CAST(1 AS BIGINT), CAST(5 AS BIGINT)) IN (CAST('85669' AS VARCHAR), CAST('86197' AS VARCHAR), CAST('88274' AS VARCHAR), CAST('83405' AS VARCHAR), CAST('86475' AS VARCHAR), CAST('85392' AS VARCHAR), CAST('85460' AS VARCHAR), CAST('80348' AS VARCHAR), CAST('81792' AS VARCHAR))) OR (ca_state IN (CAST('CA' AS VARCHAR), CAST('WA' AS VARCHAR), CAST('GA' AS VARCHAR))) OR (CAST(cs_sales_price AS DECIMAL(12,2)) > CAST(500 AS DECIMAL(12,2))))", + "(cs_sold_date_sk = d_date_sk)", + "(d_qoy = CAST(2 AS BIGINT))", + "(d_year = CAST(2001 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "ca_zip", + "Expressions": "sum(cs_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_zip", + "sum(cs_sales_price)" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.customer_address.ca_zip" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "CHUNK_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(\"substring\"(ca_zip, 1, 5) = #0)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "(IN (...) OR (cs_sales_price > 500.00) OR ((ca_state = 'CA') OR (ca_state = 'WA') OR (ca_state = 'GA')))", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_qoy = 2i64)", + "($.d_year = 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "ca_zip", + "Expressions": "sum(cs_sales_price)", + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_zip", + "sum(cs_sales_price)" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "\"substring\"(ca_zip, 1, 5) = #0", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expression": "(IN (...) OR (cs_sales_price > 500.00) OR ((ca_state = 'CA') OR (ca_state = 'WA') OR (ca_state = 'GA')))", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#3" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_qoy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "ca_zip", + "cs_sales_price" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.customer_address.ca_zip ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q16.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q16.slt.no new file mode 100644 index 00000000000..08eab8fe6e8 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q16.slt.no @@ -0,0 +1,1051 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT count(DISTINCT cs_order_number) AS "order count", + sum(cs_ext_ship_cost) AS "total shipping cost", + sum(cs_net_profit) AS "total net profit" +FROM catalog_sales cs1, + date_dim, + customer_address, + call_center +WHERE d_date BETWEEN '2002-02-01' AND cast('2002-04-02' AS date) + AND cs1.cs_ship_date_sk = d_date_sk + AND cs1.cs_ship_addr_sk = ca_address_sk + AND ca_state = 'GA' + AND cs1.cs_call_center_sk = cc_call_center_sk + AND cc_county = 'Williamson County' + AND EXISTS + (SELECT * + FROM catalog_sales cs2 + WHERE cs1.cs_order_number = cs2.cs_order_number + AND cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk) + AND NOT EXISTS + (SELECT * + FROM catalog_returns cr1 + WHERE cs1.cs_order_number = cr1.cr_order_number) +ORDER BY count(DISTINCT cs_order_number) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_rec_start_date", + "cc_rec_end_date", + "cc_closed_date_sk", + "cc_open_date_sk", + "cc_name", + "cc_class", + "cc_employees", + "cc_sq_ft", + "cc_hours", + "cc_manager", + "cc_mkt_id", + "cc_mkt_class", + "cc_mkt_desc", + "cc_market_manager", + "cc_division", + "cc_division_name", + "cc_company", + "cc_company_name", + "cc_street_number", + "cc_street_name", + "cc_street_type", + "cc_suite_number", + "cc_city", + "cc_county", + "cc_state", + "cc_zip", + "cc_country", + "cc_gmt_offset", + "cc_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_order_number = cs_order_number)", + "(cs_warehouse_sk != cs_warehouse_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "(cs_order_number = cr_order_number)" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date >= CAST('2002-02-01' AS DATE))", + "(cs_ship_date_sk = d_date_sk)", + "(cs_ship_addr_sk = ca_address_sk)", + "(ca_state = CAST('GA' AS VARCHAR))", + "(cs_call_center_sk = cc_call_center_sk)", + "(cc_county = CAST('Williamson County' AS VARCHAR))", + "SUBQUERY", + "(NOT SUBQUERY)", + "(d_date <= CAST('2002-04-02' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT cs_order_number)", + "sum(cs_ext_ship_cost)", + "sum(cs_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ] + } + } + ], + "extra_info": { + "Order By": "count(DISTINCT cs1.cs_order_number)" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "28730" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_order_number = cs_order_number)", + "(cs_warehouse_sk != cs_warehouse_sk)" + ], + "Estimated Cardinality": "1504681" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_warehouse_sk", + "cs_order_number" + ], + "Estimated Cardinality": "1504681" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_warehouse_sk", + "cs_order_number" + ], + "Estimated Cardinality": "1504681" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_ship_date_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_warehouse_sk", + "cs_order_number", + "cs_ext_ship_cost", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_state = \"GA\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_addr_sk = ca_address_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2002-02-01 <= $.d_date <= 2002-04-02)", + "(2450817i64 <= $.d_date_sk <= 2452740i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_date_sk = d_date_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.cc_county = \"Williamson County\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "cc_call_center_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_call_center_sk = cc_call_center_sk)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "(cs_warehouse_sk IS NOT DISTINCT FROM cs_warehouse_sk)", + "(cs_order_number IS NOT DISTINCT FROM cs_order_number)" + ], + "Estimated Cardinality": "5746" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_order_number = cs_order_number)", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Expressions": "cs_order_number", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Expressions": "cs_order_number", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "(cs_order_number IS NOT DISTINCT FROM cs_order_number)", + "Estimated Cardinality": "1149" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT cs_order_number)", + "sum(cs_ext_ship_cost)", + "sum(cs_net_profit)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "RIGHT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_ship_date_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_warehouse_sk", + "cs_order_number", + "cs_ext_ship_cost", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_state='GA'", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_addr_sk = ca_address_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2002-02-01 <= $.d_date <= 2002-04-02)", + "(2450817i64 <= $.d_date_sk <= 2452740i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_date_sk = d_date_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "cc_county='Williamson County'", + "Projections": "cc_call_center_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_call_center_sk = cc_call_center_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_warehouse_sk", + "cs_order_number" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "28730" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_order_number = cs_order_number", + "cs_warehouse_sk != cs_warehouse_sk" + ], + "Estimated Cardinality": "1504681" + } + } + ], + "extra_info": { + "Projections": [ + "cs_warehouse_sk", + "cs_order_number" + ], + "Estimated Cardinality": "1504681" + } + }, + { + "name": "DUMMY_SCAN", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "cs_warehouse_sk IS NOT DISTINCT FROM cs_warehouse_sk", + "cs_order_number IS NOT DISTINCT FROM cs_order_number" + ], + "Estimated Cardinality": "5746" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "", + "Estimated Cardinality": "28730" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "cs_warehouse_sk IS NOT DISTINCT FROM cs_warehouse_sk", + "cs_order_number IS NOT DISTINCT FROM cs_order_number" + ], + "Estimated Cardinality": "5746", + "Delim Index": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "1149" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "cr_order_number", + "Estimated Cardinality": "14275" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "2", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_order_number = cs_order_number", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Projections": "cs_order_number", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "cs_order_number IS NOT DISTINCT FROM cs_order_number", + "Estimated Cardinality": "1149" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "5632" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "cs_order_number IS NOT DISTINCT FROM cs_order_number", + "Estimated Cardinality": "1149", + "Delim Index": "2" + } + } + ], + "extra_info": { + "Projections": [ + "cs_order_number", + "cs_ext_ship_cost", + "cs_net_profit" + ], + "Estimated Cardinality": "1149" + } + } + ], + "extra_info": { + "Aggregates": [ + "count(DISTINCT #0)", + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "count(DISTINCT cs1.cs_order_number) ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q17.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q17.slt.no new file mode 100644 index 00000000000..dd217bc2399 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q17.slt.no @@ -0,0 +1,1132 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + i_item_desc, + s_state, + count(ss_quantity) AS store_sales_quantitycount, + avg(ss_quantity) AS store_sales_quantityave, + stddev_samp(ss_quantity) AS store_sales_quantitystdev, + stddev_samp(ss_quantity)/avg(ss_quantity) AS store_sales_quantitycov, + count(sr_return_quantity) AS store_returns_quantitycount, + avg(sr_return_quantity) AS store_returns_quantityave, + stddev_samp(sr_return_quantity) AS store_returns_quantitystdev, + stddev_samp(sr_return_quantity)/avg(sr_return_quantity) AS store_returns_quantitycov, + count(cs_quantity) AS catalog_sales_quantitycount, + avg(cs_quantity) AS catalog_sales_quantityave, + stddev_samp(cs_quantity) AS catalog_sales_quantitystdev, + stddev_samp(cs_quantity)/avg(cs_quantity) AS catalog_sales_quantitycov +FROM store_sales, + store_returns, + catalog_sales, + date_dim d1, + date_dim d2, + date_dim d3, + store, + item +WHERE d1.d_quarter_name = '2001Q1' + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_quarter_name IN ('2001Q1', + '2001Q2', + '2001Q3') + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_quarter_name IN ('2001Q1', + '2001Q2', + '2001Q3') +GROUP BY i_item_id, + i_item_desc, + s_state +ORDER BY i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + s_state NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_quarter_name = CAST('2001Q1' AS VARCHAR))", + "(d_date_sk = ss_sold_date_sk)", + "(i_item_sk = ss_item_sk)", + "(s_store_sk = ss_store_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)", + "(sr_returned_date_sk = d_date_sk)", + "(d_quarter_name IN (CAST('2001Q1' AS VARCHAR), CAST('2001Q2' AS VARCHAR), CAST('2001Q3' AS VARCHAR)))", + "(sr_customer_sk = cs_bill_customer_sk)", + "(sr_item_sk = cs_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_quarter_name IN (CAST('2001Q1' AS VARCHAR), CAST('2001Q2' AS VARCHAR), CAST('2001Q3' AS VARCHAR)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_state" + ], + "Expressions": [ + "count(ss_quantity)", + "avg(ss_quantity)", + "stddev_samp(CAST(ss_quantity AS DOUBLE))", + "count(sr_return_quantity)", + "avg(sr_return_quantity)", + "stddev_samp(CAST(sr_return_quantity AS DOUBLE))", + "count(cs_quantity)", + "avg(cs_quantity)", + "stddev_samp(CAST(cs_quantity AS DOUBLE))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_state", + "store_sales_quantitycount", + "store_sales_quantityave", + "store_sales_quantitystdev", + "store_sales_quantitycov", + "store_returns_quantitycount", + "store_returns_quantityave", + "store_returns_quantitystdev", + "store_returns_quantitycov", + "catalog_sales_quantitycount", + "catalog_sales_quantityave", + "catalog_sales_quantitystdev", + "catalog_sales_quantitycov" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "memory.main.store.s_state" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([\"2001Q1\", \"2001Q2\", \"2001Q3\"], $.d_quarter_name)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_quantity" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_quarter_name = \"2001Q1\")", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([\"2001Q1\", \"2001Q2\", \"2001Q3\"], $.d_quarter_name)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_item_sk = i_item_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_item_sk = ss_item_sk)", + "(cs_bill_customer_sk = ss_customer_sk)" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_state" + ], + "Expressions": [ + "count(ss_quantity)", + "avg(ss_quantity)", + "stddev_samp(CAST(ss_quantity AS DOUBLE))", + "count(sr_return_quantity)", + "avg(sr_return_quantity)", + "stddev_samp(CAST(sr_return_quantity AS DOUBLE))", + "count(cs_quantity)", + "avg(cs_quantity)", + "stddev_samp(CAST(cs_quantity AS DOUBLE))" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_state", + "store_sales_quantitycount", + "store_sales_quantityave", + "store_sales_quantitystdev", + "store_sales_quantitycov", + "store_returns_quantitycount", + "store_returns_quantityave", + "store_returns_quantitystdev", + "store_returns_quantitycov", + "catalog_sales_quantitycount", + "catalog_sales_quantityave", + "catalog_sales_quantitystdev", + "catalog_sales_quantitycov" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([\"2001Q1\", \"2001Q2\", \"2001Q3\"], $.d_quarter_name)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_quantity" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_quarter_name='2001Q1'", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([\"2001Q1\", \"2001Q2\", \"2001Q3\"], $.d_quarter_name)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_item_sk = i_item_sk", + "ss_customer_sk = sr_customer_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_item_sk = ss_item_sk", + "cs_bill_customer_sk = ss_customer_sk" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "s_state", + "ss_quantity", + "ss_quantity", + "CAST(ss_quantity AS DOUBLE)", + "sr_return_quantity", + "sr_return_quantity", + "CAST(sr_return_quantity AS DOUBLE)", + "cs_quantity", + "cs_quantity", + "CAST(cs_quantity AS DOUBLE)" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "count(#3)", + "avg(#4)", + "stddev_samp(#5)", + "count(#6)", + "avg(#7)", + "stddev_samp(#8)", + "count(#9)", + "avg(#10)", + "stddev_samp(#11)" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "s_state", + "store_sales_quantitycount", + "store_sales_quantityave", + "store_sales_quantitystdev", + "store_sales_quantitycov", + "store_returns_quantitycount", + "store_returns_quantityave", + "store_returns_quantitystdev", + "store_returns_quantitycov", + "catalog_sales_quantitycount", + "catalog_sales_quantityave", + "catalog_sales_quantitystdev", + "catalog_sales_quantitycov" + ], + "Estimated Cardinality": "289953" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "memory.main.store.s_state ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q18.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q18.slt.no new file mode 100644 index 00000000000..16d96cfb2d2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q18.slt.no @@ -0,0 +1,931 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + ca_country, + ca_state, + ca_county, + avg(cast(cs_quantity AS decimal(12, 2))) agg1, + avg(cast(cs_list_price AS decimal(12, 2))) agg2, + avg(cast(cs_coupon_amt AS decimal(12, 2))) agg3, + avg(cast(cs_sales_price AS decimal(12, 2))) agg4, + avg(cast(cs_net_profit AS decimal(12, 2))) agg5, + avg(cast(c_birth_year AS decimal(12, 2))) agg6, + avg(cast(cd1.cd_dep_count AS decimal(12, 2))) agg7 +FROM catalog_sales, + customer_demographics cd1, + customer_demographics cd2, + customer, + customer_address, + date_dim, + item +WHERE cs_sold_date_sk = d_date_sk + AND cs_item_sk = i_item_sk + AND cs_bill_cdemo_sk = cd1.cd_demo_sk + AND cs_bill_customer_sk = c_customer_sk + AND cd1.cd_gender = 'F' + AND cd1.cd_education_status = 'Unknown' + AND c_current_cdemo_sk = cd2.cd_demo_sk + AND c_current_addr_sk = ca_address_sk + AND c_birth_month IN (1, + 6, + 8, + 9, + 12, + 2) + AND d_year = 1998 + AND ca_state IN ('MS', + 'IN', + 'ND', + 'OK', + 'NM', + 'VA', + 'MS') +GROUP BY ROLLUP (i_item_id, + ca_country, + ca_state, + ca_county) +ORDER BY ca_country NULLS FIRST, + ca_state NULLS FIRST, + ca_county NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(cs_item_sk = i_item_sk)", + "(cs_bill_cdemo_sk = cd_demo_sk)", + "(cs_bill_customer_sk = c_customer_sk)", + "(cd_gender = CAST('F' AS VARCHAR))", + "(cd_education_status = CAST('Unknown' AS VARCHAR))", + "(c_current_cdemo_sk = cd_demo_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(c_birth_month IN (CAST(1 AS BIGINT), CAST(6 AS BIGINT), CAST(8 AS BIGINT), CAST(9 AS BIGINT), CAST(12 AS BIGINT), CAST(2 AS BIGINT)))", + "(d_year = CAST(1998 AS BIGINT))", + "(ca_state IN (CAST('MS' AS VARCHAR), CAST('IN' AS VARCHAR), CAST('ND' AS VARCHAR), CAST('OK' AS VARCHAR), CAST('NM' AS VARCHAR), CAST('VA' AS VARCHAR), CAST('MS' AS VARCHAR)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "ca_country", + "ca_state", + "ca_county" + ], + "Expressions": [ + "avg(CAST(cs_quantity AS DECIMAL(12,2)))", + "avg(CAST(cs_list_price AS DECIMAL(12,2)))", + "avg(CAST(cs_coupon_amt AS DECIMAL(12,2)))", + "avg(CAST(cs_sales_price AS DECIMAL(12,2)))", + "avg(CAST(cs_net_profit AS DECIMAL(12,2)))", + "avg(CAST(c_birth_year AS DECIMAL(12,2)))", + "avg(CAST(cd_dep_count AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "ca_country", + "ca_state", + "ca_county", + "agg1", + "agg2", + "agg3", + "agg4", + "agg5", + "agg6", + "agg7" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer_address.ca_country", + "memory.main.customer_address.ca_state", + "memory.main.customer_address.ca_county", + "memory.main.item.i_item_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price", + "cs_sales_price", + "cs_coupon_amt", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cd_gender = \"F\")", + "($.cd_education_status = \"Unknown\")", + "($.cd_demo_sk >= 16i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_dep_count" + ], + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([1i64, 6i64, 8i64, 9i64, 12i64, 2i64], $.c_birth_month)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk", + "c_birth_year" + ], + "Estimated Cardinality": "2000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"MS\", \"IN\", \"ND\", \"OK\", \"NM\", \"VA\", \"MS\"], $.ca_state)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_county", + "ca_state", + "ca_country" + ], + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "ca_country", + "ca_state", + "ca_county" + ], + "Expressions": [ + "avg(CAST(cs_quantity AS DECIMAL(12,2)))", + "avg(CAST(cs_list_price AS DECIMAL(12,2)))", + "avg(CAST(cs_coupon_amt AS DECIMAL(12,2)))", + "avg(CAST(cs_sales_price AS DECIMAL(12,2)))", + "avg(CAST(cs_net_profit AS DECIMAL(12,2)))", + "avg(CAST(c_birth_year AS DECIMAL(12,2)))", + "avg(CAST(cd_dep_count AS DECIMAL(12,2)))" + ], + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "ca_country", + "ca_state", + "ca_county", + "agg1", + "agg2", + "agg3", + "agg4", + "agg5", + "agg6", + "agg7" + ], + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": "cd_demo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price", + "cs_sales_price", + "cs_coupon_amt", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=1998", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "cd_gender='F'", + "cd_education_status='Unknown'" + ], + "Projections": [ + "cd_demo_sk", + "cd_dep_count" + ], + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([1i64, 6i64, 8i64, 9i64, 12i64, 2i64], $.c_birth_month)", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk", + "c_birth_year" + ], + "Estimated Cardinality": "2000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"MS\", \"IN\", \"ND\", \"OK\", \"NM\", \"VA\", \"MS\"], $.ca_state)", + "Projections": [ + "ca_address_sk", + "ca_county", + "ca_state", + "ca_country" + ], + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ca_country", + "ca_state", + "ca_county", + "CAST(cs_quantity AS DECIMAL(12,2))", + "CAST(cs_list_price AS DECIMAL(12,2))", + "CAST(cs_coupon_amt AS DECIMAL(12,2))", + "CAST(cs_sales_price AS DECIMAL(12,2))", + "CAST(cs_net_profit AS DECIMAL(12,2))", + "CAST(c_birth_year AS DECIMAL(12,2))", + "CAST(cd_dep_count AS DECIMAL(12,2))" + ], + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "avg(#4)", + "avg(#5)", + "avg(#6)", + "avg(#7)", + "avg(#8)", + "avg(#9)", + "avg(#10)" + ], + "Estimated Cardinality": "551707" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer_address.ca_country ASC", + "memory.main.customer_address.ca_state ASC", + "memory.main.customer_address.ca_county ASC", + "memory.main.item.i_item_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q19.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q19.slt.no new file mode 100644 index 00000000000..8b0ef829d01 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q19.slt.no @@ -0,0 +1,867 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_brand_id brand_id, + i_brand brand, + i_manufact_id, + i_manufact, + sum(ss_ext_sales_price) ext_price +FROM date_dim, + store_sales, + item, + customer, + customer_address, + store +WHERE d_date_sk = ss_sold_date_sk + AND ss_item_sk = i_item_sk + AND i_manager_id=8 + AND d_moy=11 + AND d_year=1998 + AND ss_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND SUBSTRING(ca_zip, 1, 5) <> SUBSTRING(s_zip, 1, 5) + AND ss_store_sk = s_store_sk +GROUP BY i_brand, + i_brand_id, + i_manufact_id, + i_manufact +ORDER BY ext_price DESC, + i_brand, + i_brand_id, + i_manufact_id, + i_manufact +LIMIT 100 ; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(ss_item_sk = i_item_sk)", + "(i_manager_id = CAST(8 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(1998 AS BIGINT))", + "(ss_customer_sk = c_customer_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(\"substring\"(ca_zip, CAST(1 AS BIGINT), CAST(5 AS BIGINT)) != \"substring\"(s_zip, CAST(1 AS BIGINT), CAST(5 AS BIGINT)))", + "(ss_store_sk = s_store_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id", + "i_manufact_id", + "i_manufact" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "i_manufact_id", + "i_manufact", + "ext_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price)", + "memory.main.item.i_brand", + "memory.main.item.i_brand_id", + "memory.main.item.i_manufact_id", + "memory.main.item.i_manufact" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 1998i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manager_id = 8i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_brand", + "i_manufact_id", + "i_manufact" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(\"substring\"(ca_zip, 1, 5) != \"substring\"(s_zip, 1, 5))", + "Estimated Cardinality": "5000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = c_current_addr_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_store_sk = s_store_sk)", + "(ss_customer_sk = c_customer_sk)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2", + "__internal_compress_integral_usmallint(#3, 1)", + "#4", + "__internal_compress_integral_utinyint(#5, 1)", + "__internal_compress_integral_usmallint(#6, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id", + "i_manufact_id", + "i_manufact" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "i_manufact_id", + "i_manufact", + "ext_price" + ], + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manager_id=8", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_brand", + "i_manufact_id", + "i_manufact" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "\"substring\"(ca_zip, 1, 5) != \"substring\"(s_zip, 1, 5)", + "Estimated Cardinality": "5000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = c_current_addr_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_store_sk = s_store_sk", + "ss_customer_sk = c_customer_sk" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2", + "__internal_compress_integral_usmallint(#3, 1)", + "#4", + "__internal_compress_integral_utinyint(#5, 1)", + "__internal_compress_integral_usmallint(#6, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand", + "i_brand_id", + "i_manufact_id", + "i_manufact", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": "sum(#4)", + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4" + ], + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "brand", + "i_manufact_id", + "i_manufact", + "ext_price" + ], + "Estimated Cardinality": "11533" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price) DESC", + "memory.main.item.i_brand ASC", + "memory.main.item.i_brand_id ASC", + "memory.main.item.i_manufact_id ASC", + "memory.main.item.i_manufact ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q2.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q2.slt.no new file mode 100644 index 00000000000..86ec49cb64b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q2.slt.no @@ -0,0 +1,1183 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH wscs AS + (SELECT sold_date_sk, + sales_price + FROM + (SELECT ws_sold_date_sk sold_date_sk, + ws_ext_sales_price sales_price + FROM web_sales + UNION ALL SELECT cs_sold_date_sk sold_date_sk, + cs_ext_sales_price sales_price + FROM catalog_sales) sq1), + wswscs AS + (SELECT d_week_seq, + sum(CASE + WHEN (d_day_name='Sunday') THEN sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN sales_price + ELSE NULL + END) sat_sales + FROM wscs, + date_dim + WHERE d_date_sk = sold_date_sk + GROUP BY d_week_seq) +SELECT d_week_seq1, + round(sun_sales1/sun_sales2, 2) r1, + round(mon_sales1/mon_sales2, 2) r2, + round(tue_sales1/tue_sales2, 2) r3, + round(wed_sales1/wed_sales2, 2) r4, + round(thu_sales1/thu_sales2, 2) r5, + round(fri_sales1/fri_sales2, 2) r6, + round(sat_sales1/sat_sales2, 2) +FROM + (SELECT wswscs.d_week_seq d_week_seq1, + sun_sales sun_sales1, + mon_sales mon_sales1, + tue_sales tue_sales1, + wed_sales wed_sales1, + thu_sales thu_sales1, + fri_sales fri_sales1, + sat_sales sat_sales1 + FROM wswscs, + date_dim + WHERE date_dim.d_week_seq = wswscs.d_week_seq + AND d_year = 2001) y, + (SELECT wswscs.d_week_seq d_week_seq2, + sun_sales sun_sales2, + mon_sales mon_sales2, + tue_sales tue_sales2, + wed_sales wed_sales2, + thu_sales thu_sales2, + fri_sales fri_sales2, + sat_sales sat_sales2 + FROM wswscs, + date_dim + WHERE date_dim.d_week_seq = wswscs.d_week_seq + AND d_year = 2001+1) z +WHERE d_week_seq1 = d_week_seq2-53 +ORDER BY d_week_seq1 NULLS FIRST; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_date_sk = sold_date_sk)" + } + } + ], + "extra_info": { + "Groups": "d_week_seq", + "Expressions": [ + "sum(CASE WHEN ((d_day_name = CAST('Sunday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Monday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Tuesday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Wednesday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Thursday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Friday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Saturday' AS VARCHAR))) THEN (sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_week_seq = d_week_seq)", + "(d_year = CAST(2001 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_week_seq = d_week_seq)", + "(d_year = CAST((2001 + 1) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_week_seq1 = (d_week_seq2 - CAST(53 AS BIGINT)))" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq1", + "r1", + "r2", + "r3", + "r4", + "r5", + "r6", + "round((CAST(sat_sales1 AS DOUBLE) / CAST(sat_sales2 AS DOUBLE)), 2)" + ] + } + } + ], + "extra_info": { + "Order By": "y.d_week_seq1" + } + } + ], + "extra_info": { + "CTE Name": "wswscs", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "wscs", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "215289" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "sales_price" + ], + "Estimated Cardinality": "215289" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "215289" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_week_seq", + "d_day_name" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sold_date_sk = d_date_sk)", + "Estimated Cardinality": "219547" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "219547" + } + } + ], + "extra_info": { + "Groups": "d_week_seq", + "Expressions": [ + "sum(CASE WHEN ((d_day_name = 'Sunday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Monday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Tuesday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Wednesday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Thursday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Friday')) THEN (sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Saturday')) THEN (sales_price) ELSE NULL END)" + ], + "Estimated Cardinality": "69431" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "69431" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ], + "Estimated Cardinality": "69431" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "69431" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.d_year = 2001i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = d_week_seq)", + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ], + "Estimated Cardinality": "13882" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "69431" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.d_year = 2002i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = d_week_seq)", + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ], + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq1 = (d_week_seq2 - 53))", + "Estimated Cardinality": "2690" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq1", + "r1", + "r2", + "r3", + "r4", + "r5", + "r6", + "round((CAST(sat_sales1 AS DOUBLE) / CAST(sat_sales2 AS DOUBLE)), 2)" + ], + "Estimated Cardinality": "2690" + } + } + ], + "extra_info": { + "Order By": "y.d_week_seq1", + "Estimated Cardinality": "2690" + } + } + ], + "extra_info": { + "CTE Name": "wswscs", + "Table Index": "1", + "Estimated Cardinality": "2690" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Projections": [ + "d_date_sk", + "d_week_seq", + "d_day_name" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sold_date_sk = d_date_sk", + "Estimated Cardinality": "219547" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "219547" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq", + "CASE WHEN ((d_day_name = 'Sunday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Monday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Tuesday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Wednesday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Thursday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Friday')) THEN (sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Saturday')) THEN (sales_price) ELSE NULL END" + ], + "Estimated Cardinality": "219547" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)", + "sum(#5)", + "sum(#6)", + "sum(#7)" + ], + "Estimated Cardinality": "69431" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "69431" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "69431" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = d_week_seq", + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ], + "Estimated Cardinality": "13882" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "69431" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = d_week_seq", + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ], + "Estimated Cardinality": "13882" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq1 = (d_week_seq2 - 53)", + "Estimated Cardinality": "2690" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq1", + "r1", + "r2", + "r3", + "r4", + "r5", + "r6", + "round((CAST(sat_sales1 AS DOUBLE) / CAST(sat_sales2 AS DOUBLE)), 2)" + ], + "Estimated Cardinality": "2690" + } + } + ], + "extra_info": { + "Order By": "y.d_week_seq1 ASC" + } + } + ], + "extra_info": { + "CTE Name": "wswscs", + "Table Index": "1", + "Estimated Cardinality": "2690" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q20.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q20.slt.no new file mode 100644 index 00000000000..0cac60b6c2d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q20.slt.no @@ -0,0 +1,606 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id , + i_item_desc, + i_category, + i_class, + i_current_price , + sum(cs_ext_sales_price) AS itemrevenue, + sum(cs_ext_sales_price)*100.0000/sum(sum(cs_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM catalog_sales , + item, + date_dim +WHERE cs_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id , + i_item_desc, + i_category , + i_class , + i_current_price +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + revenueratio NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = i_item_sk)", + "(i_category IN (CAST('Sports' AS VARCHAR), CAST('Books' AS VARCHAR), CAST('Home' AS VARCHAR)))", + "(cs_sold_date_sk = d_date_sk)", + "(d_date >= CAST('1999-02-22' AS DATE))", + "(d_date <= CAST('1999-03-24' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(cs_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(cs_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_category", + "memory.main.item.i_class", + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "((sum(memory.main.catalog_sales.cs_ext_sales_price) * 100.0000) / sum(sum(memory.main.catalog_sales.cs_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class))" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(cs_ext_sales_price)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(cs_ext_sales_price)) OVER (PARTITION BY i_class)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "sum(#5)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": "sum(sum(cs_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.item.i_category ASC", + "memory.main.item.i_class ASC", + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "((sum(memory.main.catalog_sales.cs_ext_sales_price) * 100.0000) / sum(sum(memory.main.catalog_sales.cs_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class)) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q21.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q21.slt.no new file mode 100644 index 00000000000..bbb640f17d4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q21.slt.no @@ -0,0 +1,606 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT w_warehouse_name, + i_item_id, + sum(CASE + WHEN (cast(d_date AS date) < CAST ('2000-03-11' AS date)) THEN inv_quantity_on_hand + ELSE 0 + END) AS inv_before, + sum(CASE + WHEN (cast(d_date AS date) >= CAST ('2000-03-11' AS date)) THEN inv_quantity_on_hand + ELSE 0 + END) AS inv_after + FROM inventory, + warehouse, + item, + date_dim + WHERE i_current_price BETWEEN 0.99 AND 1.49 + AND i_item_sk = inv_item_sk + AND inv_warehouse_sk = w_warehouse_sk + AND inv_date_sk = d_date_sk + AND d_date BETWEEN CAST ('2000-02-10' AS date) AND CAST ('2000-04-10' AS date) + GROUP BY w_warehouse_name, + i_item_id) x +WHERE (CASE + WHEN inv_before > 0 THEN (inv_after*1.000) / inv_before + ELSE NULL + END) BETWEEN 2.000/3.000 AND 3.000/2.000 +ORDER BY w_warehouse_name NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_current_price >= CAST(0.99 AS DECIMAL(7,2)))", + "(i_item_sk = inv_item_sk)", + "(inv_warehouse_sk = w_warehouse_sk)", + "(inv_date_sk = d_date_sk)", + "(d_date >= CAST('2000-02-10' AS DATE))", + "(i_current_price <= CAST(1.49 AS DECIMAL(7,2)))", + "(d_date <= CAST('2000-04-10' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "i_item_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_date < CAST('2000-03-11' AS DATE))) THEN (inv_quantity_on_hand) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((d_date >= CAST('2000-03-11' AS DATE))) THEN (inv_quantity_on_hand) ELSE CAST(0 AS INTEGER) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "i_item_id", + "inv_before", + "inv_after" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(CASE WHEN ((inv_before > CAST(0 AS HUGEINT))) THEN ((CAST((inv_after * CAST(1.000 AS DECIMAL(38,3))) AS DOUBLE) / CAST(inv_before AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END >= (CAST(2.000 AS DOUBLE) / CAST(3.000 AS DOUBLE)))", + "(CASE WHEN ((inv_before > CAST(0 AS HUGEINT))) THEN ((CAST((inv_after * CAST(1.000 AS DECIMAL(38,3))) AS DOUBLE) / CAST(inv_before AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END <= (CAST(3.000 AS DOUBLE) / CAST(2.000 AS DOUBLE)))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "i_item_id", + "inv_before", + "inv_after" + ] + } + } + ], + "extra_info": { + "Order By": [ + "x.w_warehouse_name", + "x.i_item_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(decimal128(99, precision=7, scale=2) <= $.i_current_price <= decimal128(149, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_item_sk = i_item_sk)", + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-02-10 <= $.d_date <= 2000-04-10)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "i_item_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_date < '2000-03-11'::DATE)) THEN (inv_quantity_on_hand) ELSE 0 END)", + "sum(CASE WHEN ((d_date >= '2000-03-11'::DATE)) THEN (inv_quantity_on_hand) ELSE 0 END)" + ], + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "i_item_id", + "inv_before", + "inv_after" + ], + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((inv_before > 0)) THEN ((CAST((inv_after * 1.000) AS DOUBLE) / CAST(inv_before AS DOUBLE))) ELSE NULL END BETWEEN 0.6666666666666666 AND 1.5)", + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "i_item_id", + "inv_before", + "inv_after" + ], + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(decimal128(99, precision=7, scale=2) <= $.i_current_price <= decimal128(149, precision=7, scale=2))", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_item_sk = i_item_sk", + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-02-10 <= $.d_date <= 2000-04-10)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "i_item_id", + "CASE WHEN ((d_date < '2000-03-11'::DATE)) THEN (inv_quantity_on_hand) ELSE 0 END", + "CASE WHEN ((d_date >= '2000-03-11'::DATE)) THEN (inv_quantity_on_hand) ELSE 0 END" + ], + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((inv_before > 0)) THEN ((CAST((inv_after * 1.000) AS DOUBLE) / CAST(inv_before AS DOUBLE))) ELSE NULL END BETWEEN 0.6666666666666666 AND 1.5)", + "Estimated Cardinality": "234899" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "x.w_warehouse_name ASC", + "x.i_item_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q22.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q22.slt.no new file mode 100644 index 00000000000..b2d0647c8ad --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q22.slt.no @@ -0,0 +1,446 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_product_name , + i_brand , + i_class , + i_category , + avg(inv_quantity_on_hand) qoh +FROM inventory , + date_dim , + item +WHERE inv_date_sk=d_date_sk + AND inv_item_sk=i_item_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 +GROUP BY rollup(i_product_name ,i_brand ,i_class ,i_category) +ORDER BY qoh NULLS FIRST, + i_product_name NULLS FIRST, + i_brand NULLS FIRST, + i_class NULLS FIRST, + i_category NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(inv_date_sk = d_date_sk)", + "(inv_item_sk = i_item_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_product_name", + "i_brand", + "i_class", + "i_category" + ], + "Expressions": "avg(inv_quantity_on_hand)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_product_name", + "i_brand", + "i_class", + "i_category", + "qoh" + ] + } + } + ], + "extra_info": { + "Order By": [ + "avg(memory.main.inventory.inv_quantity_on_hand)", + "memory.main.item.i_product_name", + "memory.main.item.i_brand", + "memory.main.item.i_class", + "memory.main.item.i_category" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_item_sk = i_item_sk)", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Groups": [ + "i_product_name", + "i_brand", + "i_class", + "i_category" + ], + "Expressions": "avg(inv_quantity_on_hand)", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": [ + "i_product_name", + "i_brand", + "i_class", + "i_category", + "qoh" + ], + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "inv_date_sk", + "inv_item_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_item_sk = i_item_sk", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Projections": [ + "i_product_name", + "i_brand", + "i_class", + "i_category", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": "avg(#4)", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "avg(memory.main.inventory.inv_quantity_on_hand) ASC", + "memory.main.item.i_product_name ASC", + "memory.main.item.i_brand ASC", + "memory.main.item.i_class ASC", + "memory.main.item.i_category ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q23.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q23.slt.no new file mode 100644 index 00000000000..c97fb96b7ce --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q23.slt.no @@ -0,0 +1,2597 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH frequent_ss_items AS + (SELECT itemdesc, + i_item_sk item_sk, + d_date solddate, + count(*) cnt + FROM store_sales, + date_dim, + (SELECT SUBSTRING(i_item_desc, 1, 30) itemdesc, + * + FROM item) sq1 + WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND d_year IN (2000, + 2000+1, + 2000+2, + 2000+3) + GROUP BY itemdesc, + i_item_sk, + d_date + HAVING count(*) >4), + max_store_sales AS + (SELECT max(csales) tpcds_cmax + FROM + (SELECT c_customer_sk, + sum(ss_quantity*ss_sales_price) csales + FROM store_sales, + customer, + date_dim + WHERE ss_customer_sk = c_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year IN (2000, + 2000+1, + 2000+2, + 2000+3) + GROUP BY c_customer_sk) sq2), + best_ss_customer AS + (SELECT c_customer_sk, + sum(ss_quantity*ss_sales_price) ssales + FROM store_sales, + customer, + max_store_sales + WHERE ss_customer_sk = c_customer_sk + GROUP BY c_customer_sk + HAVING sum(ss_quantity*ss_sales_price) > (50/100.0) * max(tpcds_cmax)) +SELECT c_last_name, + c_first_name, + sales +FROM + (SELECT c_last_name, + c_first_name, + sum(cs_quantity*cs_list_price) sales + FROM catalog_sales, + customer, + date_dim, + frequent_ss_items, + best_ss_customer + WHERE d_year = 2000 + AND d_moy = 2 + AND cs_sold_date_sk = d_date_sk + AND cs_item_sk = item_sk + AND cs_bill_customer_sk = best_ss_customer.c_customer_sk + AND cs_bill_customer_sk = customer.c_customer_sk + GROUP BY c_last_name, + c_first_name + UNION ALL SELECT c_last_name, + c_first_name, + sum(ws_quantity*ws_list_price) sales + FROM web_sales, + customer, + date_dim, + frequent_ss_items, + best_ss_customer + WHERE d_year = 2000 + AND d_moy = 2 + AND ws_sold_date_sk = d_date_sk + AND ws_item_sk = item_sk + AND ws_bill_customer_sk = best_ss_customer.c_customer_sk + AND ws_bill_customer_sk = customer.c_customer_sk + GROUP BY c_last_name, + c_first_name) sq3 +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + sales NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "itemdesc", + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)", + "(d_year IN (CAST(2000 AS BIGINT), CAST((2000 + 1) AS BIGINT), CAST((2000 + 2) AS BIGINT), CAST((2000 + 3) AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "itemdesc", + "i_item_sk", + "d_date" + ], + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "(count_star() > CAST(4 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "itemdesc", + "item_sk", + "solddate", + "cnt" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_customer_sk = c_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year IN (CAST(2000 AS BIGINT), CAST((2000 + 1) AS BIGINT), CAST((2000 + 2) AS BIGINT), CAST((2000 + 3) AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2))))" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "csales" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "max(csales)" + } + } + ], + "extra_info": { + "Expressions": "tpcds_cmax" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(ss_customer_sk = c_customer_sk)" + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": [ + "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2))))", + "max(tpcds_cmax)" + ] + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2)))) AS DOUBLE) > ((CAST(50 AS DOUBLE) / CAST(100.0 AS DOUBLE)) * CAST(max(tpcds_cmax) AS DOUBLE)))" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "ssales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(2000 AS BIGINT))", + "(d_moy = CAST(2 AS BIGINT))", + "(cs_sold_date_sk = d_date_sk)", + "(cs_item_sk = item_sk)", + "(cs_bill_customer_sk = c_customer_sk)", + "(cs_bill_customer_sk = c_customer_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name" + ], + "Expressions": "sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2))))" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(2000 AS BIGINT))", + "(d_moy = CAST(2 AS BIGINT))", + "(ws_sold_date_sk = d_date_sk)", + "(ws_item_sk = item_sk)", + "(ws_bill_customer_sk = c_customer_sk)", + "(ws_bill_customer_sk = c_customer_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name" + ], + "Expressions": "sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2))))" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sq3.c_last_name", + "sq3.c_first_name", + "sq3.sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "best_ss_customer", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "max_store_sales", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "frequent_ss_items", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([2000i64, 2001i64, 2002i64, 2003i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "itemdesc", + "i_item_sk" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "itemdesc", + "i_item_sk", + "d_date" + ], + "Expressions": "count_star()", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "(count_star() > 4)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "item_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "#0" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_customer_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([2000i64, 2001i64, 2002i64, 2003i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2))))", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": "csales", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "max(csales)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "tpcds_cmax", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": [ + "sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2))))", + "max(tpcds_cmax)" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2)))) AS DOUBLE) > (0.5 * CAST(max(tpcds_cmax) AS DOUBLE)))", + "Estimated Cardinality": "36468" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "ssales" + ], + "Estimated Cardinality": "36468" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2", + "Estimated Cardinality": "36468" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "($.d_moy = 2i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(item_sk = cs_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = cs_bill_customer_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = cs_bill_customer_sk)", + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name" + ], + "Expressions": "sum((CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2))))", + "Estimated Cardinality": "42065" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ], + "Estimated Cardinality": "42065" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2", + "Estimated Cardinality": "36468" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "($.d_moy = 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(item_sk = ws_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ws_bill_customer_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ws_bill_customer_sk)", + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name" + ], + "Expressions": "sum((CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2))))", + "Estimated Cardinality": "42065" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ], + "Estimated Cardinality": "42065" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "84130" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "sales" + ], + "Estimated Cardinality": "84130" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "best_ss_customer", + "Table Index": "2", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "frequent_ss_items", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([2000i64, 2001i64, 2002i64, 2003i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Projections": [ + "itemdesc", + "i_item_sk" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "itemdesc", + "i_item_sk", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "count_star()", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "(count_star() > 4)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "#1", + "Estimated Cardinality": "57692" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_customer_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "c_customer_sk", + "Estimated Cardinality": "10000" + } + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "c_customer_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([2000i64, 2001i64, 2002i64, 2003i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_sk", + "(CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": "csales", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": "csales", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Aggregates": "max(#0)" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_sk", + "(CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2)))", + "tpcds_cmax" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "max(#2)" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expression": "(CAST(sum((CAST(ss_quantity AS DECIMAL(26,0)) * CAST(ss_sales_price AS DECIMAL(26,2)))) AS DOUBLE) > (0.5 * CAST(max(tpcds_cmax) AS DOUBLE)))", + "Estimated Cardinality": "36468" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1" + ], + "Estimated Cardinality": "36468" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2", + "Estimated Cardinality": "36468" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity", + "cs_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2000", + "d_moy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "item_sk = cs_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = cs_bill_customer_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = cs_bill_customer_sk", + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "(CAST(cs_quantity AS DECIMAL(26,0)) * CAST(cs_list_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "42065" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2", + "Estimated Cardinality": "36468" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_quantity", + "ws_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2000", + "d_moy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "item_sk = ws_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ws_bill_customer_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ws_bill_customer_sk", + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "(CAST(ws_quantity AS DECIMAL(26,0)) * CAST(ws_list_price AS DECIMAL(26,2)))" + ], + "Estimated Cardinality": "42066" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "42065" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sq3.c_last_name ASC", + "sq3.c_first_name ASC", + "sq3.sales ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "best_ss_customer", + "Table Index": "2", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "frequent_ss_items", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q24.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q24.slt.no new file mode 100644 index 00000000000..4ff76c8f7d4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q24.slt.no @@ -0,0 +1,1311 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ssales AS + (SELECT c_last_name, + c_first_name, + s_store_name, + ca_state, + s_state, + i_color, + i_current_price, + i_manager_id, + i_units, + i_size, + sum(ss_net_paid) netpaid + FROM store_sales, + store_returns, + store, + item, + customer, + customer_address + WHERE ss_ticket_number = sr_ticket_number + AND ss_item_sk = sr_item_sk + AND ss_customer_sk = c_customer_sk + AND ss_item_sk = i_item_sk + AND ss_store_sk = s_store_sk + AND c_current_addr_sk = ca_address_sk + AND c_birth_country <> upper(ca_country) + AND s_zip = ca_zip + AND s_market_id=8 + GROUP BY c_last_name, + c_first_name, + s_store_name, + ca_state, + s_state, + i_color, + i_current_price, + i_manager_id, + i_units, + i_size) +SELECT c_last_name, + c_first_name, + s_store_name, + sum(netpaid) paid +FROM ssales +WHERE i_color = 'peach' +GROUP BY c_last_name, + c_first_name, + s_store_name +HAVING sum(netpaid) > + (SELECT 0.05*avg(netpaid) + FROM ssales) +ORDER BY c_last_name, + c_first_name, + s_store_name ; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)", + "(ss_customer_sk = c_customer_sk)", + "(ss_item_sk = i_item_sk)", + "(ss_store_sk = s_store_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(c_birth_country != upper(ca_country))", + "(s_zip = ca_zip)", + "(s_market_id = CAST(8 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name", + "s_store_name", + "ca_state", + "s_state", + "i_color", + "i_current_price", + "i_manager_id", + "i_units", + "i_size" + ], + "Expressions": "sum(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "s_store_name", + "ca_state", + "s_state", + "i_color", + "i_current_price", + "i_manager_id", + "i_units", + "i_size", + "netpaid" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "(i_color = CAST('peach' AS VARCHAR))" + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name", + "s_store_name" + ], + "Expressions": "sum(netpaid)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(netpaid)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(0.05 AS DOUBLE) * avg(netpaid))" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[57.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[63.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[63.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(CAST(sum(netpaid) AS DOUBLE) > SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "s_store_name", + "paid" + ] + } + } + ], + "extra_info": { + "Order By": [ + "ssales.c_last_name", + "ssales.c_first_name", + "ssales.s_store_name" + ] + } + } + ], + "extra_info": { + "CTE Name": "ssales", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_net_paid" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_current_price", + "i_size", + "i_color", + "i_units", + "i_manager_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_item_sk = i_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name", + "c_birth_country" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state", + "ca_zip", + "ca_country" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_zip = s_zip)", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(c_current_addr_sk = ca_address_sk)", + "(c_birth_country != upper(ca_country))" + ], + "Estimated Cardinality": "170997" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_customer_sk = c_customer_sk)", + "(ss_store_sk = s_store_sk)" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)", + "#9", + "#10", + "#8", + "#6", + "#7" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name", + "s_store_name", + "ca_state", + "s_state", + "i_color", + "i_current_price", + "i_manager_id", + "i_units", + "i_size" + ], + "Expressions": "sum(ss_net_paid)", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1)", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "s_store_name", + "i_color", + "netpaid" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": "(i_color = 'peach')", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Groups": [ + "c_last_name", + "c_first_name", + "s_store_name" + ], + "Expressions": "sum(netpaid)", + "Estimated Cardinality": "4932665" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(netpaid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "(0.05 * avg(netpaid))", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(CAST(sum(netpaid) AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "s_store_name", + "paid" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Order By": [ + "ssales.c_last_name", + "ssales.c_first_name", + "ssales.s_store_name" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "CTE Name": "ssales", + "Table Index": "0", + "Estimated Cardinality": "4932665" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_net_paid" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_current_price", + "i_size", + "i_color", + "i_units", + "i_manager_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_item_sk = i_item_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name", + "c_birth_country" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state", + "ca_zip", + "ca_country" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_zip = s_zip", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "c_current_addr_sk = ca_address_sk", + "c_birth_country != upper(ca_country)" + ], + "Estimated Cardinality": "170997" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_customer_sk = c_customer_sk", + "ss_store_sk = s_store_sk" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)", + "#9", + "#10", + "#8", + "#6", + "#7" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "s_store_name", + "ca_state", + "s_state", + "i_color", + "i_current_price", + "i_manager_id", + "i_units", + "i_size", + "ss_net_paid" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Aggregates": "sum(#10)", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1)", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "s_store_name", + "i_color", + "netpaid" + ], + "Estimated Cardinality": "4932665" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expression": "(i_color = 'peach')", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "s_store_name", + "netpaid" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "4932665" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": "netpaid", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "(0.05 * avg(netpaid))", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "CAST(sum(netpaid) AS DOUBLE) > SUBQUERY", + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "s_store_name", + "paid" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Order By": [ + "ssales.c_last_name ASC", + "ssales.c_first_name ASC", + "ssales.s_store_name ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "ssales", + "Table Index": "0", + "Estimated Cardinality": "4932665" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q25.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q25.slt.no new file mode 100644 index 00000000000..ed52639e8cb --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q25.slt.no @@ -0,0 +1,1073 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id , + i_item_desc , + s_store_id , + s_store_name , + sum(ss_net_profit) AS store_sales_profit , + sum(sr_net_loss) AS store_returns_loss , + sum(cs_net_profit) AS catalog_sales_profit +FROM store_sales , + store_returns , + catalog_sales , + date_dim d1 , + date_dim d2 , + date_dim d3 , + store , + item +WHERE d1.d_moy = 4 + AND d1.d_year = 2001 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_moy BETWEEN 4 AND 10 + AND d2.d_year = 2001 + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_moy BETWEEN 4 AND 10 + AND d3.d_year = 2001 +GROUP BY i_item_id , + i_item_desc , + s_store_id , + s_store_name +ORDER BY i_item_id , + i_item_desc , + s_store_id , + s_store_name +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_moy = CAST(4 AS BIGINT))", + "(d_year = CAST(2001 AS BIGINT))", + "(d_date_sk = ss_sold_date_sk)", + "(i_item_sk = ss_item_sk)", + "(s_store_sk = ss_store_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)", + "(sr_returned_date_sk = d_date_sk)", + "(d_moy >= CAST(4 AS BIGINT))", + "(d_year = CAST(2001 AS BIGINT))", + "(sr_customer_sk = cs_bill_customer_sk)", + "(sr_item_sk = cs_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_moy >= CAST(4 AS BIGINT))", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy <= CAST(10 AS BIGINT))", + "(d_moy <= CAST(10 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name" + ], + "Expressions": [ + "sum(ss_net_profit)", + "sum(sr_net_loss)", + "sum(cs_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "store_sales_profit", + "store_returns_loss", + "catalog_sales_profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "memory.main.store.s_store_id", + "memory.main.store.s_store_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 4i64)", + "($.d_year = 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(4i64 <= $.d_moy <= 10i64)", + "($.d_year = 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(4i64 <= $.d_moy <= 10i64)", + "($.d_year = 2001i64)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "5713" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_item_sk = sr_item_sk)", + "(cs_bill_customer_sk = sr_customer_sk)" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_item_sk = i_item_sk)", + "(ss_customer_sk = cs_bill_customer_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "11591" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name" + ], + "Expressions": [ + "sum(ss_net_profit)", + "sum(sr_net_loss)", + "sum(cs_net_profit)" + ], + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "store_sales_profit", + "store_returns_loss", + "catalog_sales_profit" + ], + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=4" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "5713" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_item_sk = sr_item_sk", + "cs_bill_customer_sk = sr_customer_sk" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_item_sk = i_item_sk", + "ss_customer_sk = cs_bill_customer_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "11591" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "ss_net_profit", + "sr_net_loss", + "cs_net_profit" + ], + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)", + "sum(#6)" + ], + "Estimated Cardinality": "11591" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "memory.main.store.s_store_id ASC", + "memory.main.store.s_store_name ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q26.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q26.slt.no new file mode 100644 index 00000000000..b9fd9c56b92 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q26.slt.no @@ -0,0 +1,705 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + avg(cs_quantity) agg1, + avg(cs_list_price) agg2, + avg(cs_coupon_amt) agg3, + avg(cs_sales_price) agg4 +FROM catalog_sales, + customer_demographics, + date_dim, + item, + promotion +WHERE cs_sold_date_sk = d_date_sk + AND cs_item_sk = i_item_sk + AND cs_bill_cdemo_sk = cd_demo_sk + AND cs_promo_sk = p_promo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND (p_channel_email = 'N' + OR p_channel_event = 'N') + AND d_year = 2000 +GROUP BY i_item_id +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(cs_item_sk = i_item_sk)", + "(cs_bill_cdemo_sk = cd_demo_sk)", + "(cs_promo_sk = p_promo_sk)", + "(cd_gender = CAST('M' AS VARCHAR))", + "(cd_marital_status = CAST('S' AS VARCHAR))", + "(cd_education_status = CAST('College' AS VARCHAR))", + "((p_channel_email = CAST('N' AS VARCHAR)) OR (p_channel_event = CAST('N' AS VARCHAR)))", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(cs_quantity)", + "avg(cs_list_price)", + "avg(cs_coupon_amt)", + "avg(cs_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.item.i_item_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_cdemo_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_quantity", + "cs_list_price", + "cs_sales_price", + "cs_coupon_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cd_gender = \"M\")", + "($.cd_marital_status = \"S\")", + "($.cd_education_status = \"College\")", + "($.cd_demo_sk >= 16i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(($.p_channel_email = \"N\") or ($.p_channel_event = \"N\"))", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_promo_sk = p_promo_sk)", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(cs_quantity)", + "avg(cs_list_price)", + "avg(cs_coupon_amt)", + "avg(cs_sales_price)" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_cdemo_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_quantity", + "cs_list_price", + "cs_sales_price", + "cs_coupon_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "cd_gender='M'", + "cd_marital_status='S'", + "cd_education_status='College'" + ], + "Projections": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(($.p_channel_email = \"N\") or ($.p_channel_event = \"N\"))", + "Projections": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_promo_sk = p_promo_sk", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "cs_quantity", + "cs_list_price", + "cs_coupon_amt", + "cs_sales_price" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "avg(#1)", + "avg(#2)", + "avg(#3)", + "avg(#4)" + ], + "Estimated Cardinality": "5630" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.item.i_item_id ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q27.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q27.slt.no new file mode 100644 index 00000000000..7cc7f1a6b33 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q27.slt.no @@ -0,0 +1,1169 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH results AS + (SELECT i_item_id, + s_state, + 0 AS g_state, + ss_quantity agg1, + ss_list_price agg2, + ss_coupon_amt agg3, + ss_sales_price agg4 + FROM store_sales, + customer_demographics, + date_dim, + store, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND ss_store_sk = s_store_sk + AND ss_cdemo_sk = cd_demo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND d_year = 2002 + AND s_state = 'TN' ) +SELECT i_item_id, + s_state, + g_state, + agg1, + agg2, + agg3, + agg4 +FROM + ( SELECT i_item_id, + s_state, + 0 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results + GROUP BY i_item_id , + s_state + UNION ALL SELECT i_item_id, + NULL AS s_state, + 1 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results + GROUP BY i_item_id + UNION ALL SELECT NULL AS i_item_id, + NULL AS s_state, + 1 AS g_state, + avg(agg1) agg1, + avg(agg2) agg2, + avg(agg3) agg3, + avg(agg4) agg4 + FROM results ) foo +ORDER BY i_item_id NULLS FIRST, + s_state NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_cdemo_sk = cd_demo_sk)", + "(cd_gender = CAST('M' AS VARCHAR))", + "(cd_marital_status = CAST('S' AS VARCHAR))", + "(cd_education_status = CAST('College' AS VARCHAR))", + "(d_year = CAST(2002 AS BIGINT))", + "(s_state = CAST('TN' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "s_state" + ], + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + } + ], + "extra_info": { + "Order By": [ + "foo.i_item_id", + "foo.s_state" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_cdemo_sk", + "ss_store_sk", + "ss_quantity", + "ss_list_price", + "ss_sales_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cd_gender = \"M\")", + "($.cd_marital_status = \"S\")", + "($.cd_education_status = \"College\")", + "(2i64 <= $.cd_demo_sk <= 192076i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_state = \"TN\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ] + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "s_state" + ], + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11307" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(agg1)", + "avg(agg2)", + "avg(agg3)", + "avg(agg4)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "22842" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "22842" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_cdemo_sk", + "ss_store_sk", + "ss_quantity", + "ss_list_price", + "ss_sales_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "cd_gender='M'", + "cd_marital_status='S'", + "cd_education_status='College'" + ], + "Projections": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_state='TN'", + "Projections": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "s_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11535" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "s_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "avg(#2)", + "avg(#3)", + "avg(#4)", + "avg(#5)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "avg(#1)", + "avg(#2)", + "avg(#3)", + "avg(#4)" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11307" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "avg(#1)", + "avg(#2)", + "avg(#3)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "s_state", + "g_state", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "foo.i_item_id ASC", + "foo.s_state ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q28.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q28.slt.no new file mode 100644 index 00000000000..514888167a2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q28.slt.no @@ -0,0 +1,1261 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT avg(ss_list_price) B1_LP, + count(ss_list_price) B1_CNT, + count(DISTINCT ss_list_price) B1_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 0 AND 5 + AND (ss_list_price BETWEEN 8 AND 8+10 + OR ss_coupon_amt BETWEEN 459 AND 459+1000 + OR ss_wholesale_cost BETWEEN 57 AND 57+20)) B1, + (SELECT avg(ss_list_price) B2_LP, + count(ss_list_price) B2_CNT, + count(DISTINCT ss_list_price) B2_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 6 AND 10 + AND (ss_list_price BETWEEN 90 AND 90+10 + OR ss_coupon_amt BETWEEN 2323 AND 2323+1000 + OR ss_wholesale_cost BETWEEN 31 AND 31+20)) B2, + (SELECT avg(ss_list_price) B3_LP, + count(ss_list_price) B3_CNT, + count(DISTINCT ss_list_price) B3_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 11 AND 15 + AND (ss_list_price BETWEEN 142 AND 142+10 + OR ss_coupon_amt BETWEEN 12214 AND 12214+1000 + OR ss_wholesale_cost BETWEEN 79 AND 79+20)) B3, + (SELECT avg(ss_list_price) B4_LP, + count(ss_list_price) B4_CNT, + count(DISTINCT ss_list_price) B4_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 16 AND 20 + AND (ss_list_price BETWEEN 135 AND 135+10 + OR ss_coupon_amt BETWEEN 6071 AND 6071+1000 + OR ss_wholesale_cost BETWEEN 38 AND 38+20)) B4, + (SELECT avg(ss_list_price) B5_LP, + count(ss_list_price) B5_CNT, + count(DISTINCT ss_list_price) B5_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 25 + AND (ss_list_price BETWEEN 122 AND 122+10 + OR ss_coupon_amt BETWEEN 836 AND 836+1000 + OR ss_wholesale_cost BETWEEN 17 AND 17+20)) B5, + (SELECT avg(ss_list_price) B6_LP, + count(ss_list_price) B6_CNT, + count(DISTINCT ss_list_price) B6_CNTD + FROM store_sales + WHERE ss_quantity BETWEEN 26 AND 30 + AND (ss_list_price BETWEEN 154 AND 154+10 + OR ss_coupon_amt BETWEEN 7326 AND 7326+1000 + OR ss_wholesale_cost BETWEEN 7 AND 7+20)) B6 +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(0 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(8 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((8 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(459 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((459 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(57 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((57 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(5 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B1_LP", + "B1_CNT", + "B1_CNTD" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(6 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(90 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((90 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(2323 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((2323 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(31 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((31 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(10 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B2_LP", + "B2_CNT", + "B2_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(11 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(142 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((142 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(12214 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((12214 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(79 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((79 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(15 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B3_LP", + "B3_CNT", + "B3_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(16 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(135 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((135 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(6071 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((6071 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(38 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((38 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(20 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B4_LP", + "B4_CNT", + "B4_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(21 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(122 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((122 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(836 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((836 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(17 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((17 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(25 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B5_LP", + "B5_CNT", + "B5_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(26 AS BIGINT))", + "(((CAST(ss_list_price AS DECIMAL(12,2)) >= CAST(154 AS DECIMAL(12,2))) AND (CAST(ss_list_price AS DECIMAL(12,2)) <= CAST((154 + 10) AS DECIMAL(12,2)))) OR ((CAST(ss_coupon_amt AS DECIMAL(12,2)) >= CAST(7326 AS DECIMAL(12,2))) AND (CAST(ss_coupon_amt AS DECIMAL(12,2)) <= CAST((7326 + 1000) AS DECIMAL(12,2)))) OR ((CAST(ss_wholesale_cost AS DECIMAL(12,2)) >= CAST(7 AS DECIMAL(12,2))) AND (CAST(ss_wholesale_cost AS DECIMAL(12,2)) <= CAST((7 + 20) AS DECIMAL(12,2)))))", + "(ss_quantity <= CAST(30 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "B6_LP", + "B6_CNT", + "B6_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "B1_LP", + "B1_CNT", + "B1_CNTD", + "B2_LP", + "B2_CNT", + "B2_CNTD", + "B3_LP", + "B3_CNT", + "B3_CNTD", + "B4_LP", + "B4_CNT", + "B4_CNTD", + "B5_LP", + "B5_CNT", + "B5_CNTD", + "B6_LP", + "B6_CNT", + "B6_CNTD" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(12200, precision=7, scale=2)) and ($.ss_list_price <= decimal128(13200, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(83600, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(183600, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(1700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(3700, precision=7, scale=2))))", + "(21i64 <= $.ss_quantity <= 25i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B5_LP", + "B5_CNT", + "B5_CNTD" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(15400, precision=7, scale=2)) and ($.ss_list_price <= decimal128(16400, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(732600, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(832600, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(2700, precision=7, scale=2))))", + "(26i64 <= $.ss_quantity <= 30i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B6_LP", + "B6_CNT", + "B6_CNTD" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(13500, precision=7, scale=2)) and ($.ss_list_price <= decimal128(14500, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(607100, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(707100, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(3800, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(5800, precision=7, scale=2))))", + "(16i64 <= $.ss_quantity <= 20i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B4_LP", + "B4_CNT", + "B4_CNTD" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(14200, precision=7, scale=2)) and ($.ss_list_price <= decimal128(15200, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(1221400, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(1321400, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(7900, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(9900, precision=7, scale=2))))", + "(11i64 <= $.ss_quantity <= 15i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B3_LP", + "B3_CNT", + "B3_CNTD" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(9000, precision=7, scale=2)) and ($.ss_list_price <= decimal128(10000, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(232300, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(332300, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(3100, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(5100, precision=7, scale=2))))", + "(6i64 <= $.ss_quantity <= 10i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B2_LP", + "B2_CNT", + "B2_CNTD" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.ss_list_price >= decimal128(800, precision=7, scale=2)) and ($.ss_list_price <= decimal128(1800, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(45900, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(145900, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(5700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(7700, precision=7, scale=2))))", + "(0i64 <= $.ss_quantity <= 5i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "avg(ss_list_price)", + "count(ss_list_price)", + "count(DISTINCT ss_list_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "B1_LP", + "B1_CNT", + "B1_CNTD" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "B1_LP", + "B1_CNT", + "B1_CNTD", + "B2_LP", + "B2_CNT", + "B2_CNTD", + "B3_LP", + "B3_CNT", + "B3_CNTD", + "B4_LP", + "B4_CNT", + "B4_CNTD", + "B5_LP", + "B5_CNT", + "B5_CNTD", + "B6_LP", + "B6_CNT", + "B6_CNTD" + ], + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "STREAMING_LIMIT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(12200, precision=7, scale=2)) and ($.ss_list_price <= decimal128(13200, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(83600, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(183600, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(1700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(3700, precision=7, scale=2))))", + "(21i64 <= $.ss_quantity <= 25i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(15400, precision=7, scale=2)) and ($.ss_list_price <= decimal128(16400, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(732600, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(832600, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(2700, precision=7, scale=2))))", + "(26i64 <= $.ss_quantity <= 30i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(13500, precision=7, scale=2)) and ($.ss_list_price <= decimal128(14500, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(607100, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(707100, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(3800, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(5800, precision=7, scale=2))))", + "(16i64 <= $.ss_quantity <= 20i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(14200, precision=7, scale=2)) and ($.ss_list_price <= decimal128(15200, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(1221400, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(1321400, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(7900, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(9900, precision=7, scale=2))))", + "(11i64 <= $.ss_quantity <= 15i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(9000, precision=7, scale=2)) and ($.ss_list_price <= decimal128(10000, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(232300, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(332300, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(3100, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(5100, precision=7, scale=2))))", + "(6i64 <= $.ss_quantity <= 10i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.ss_list_price >= decimal128(800, precision=7, scale=2)) and ($.ss_list_price <= decimal128(1800, precision=7, scale=2))) or (($.ss_coupon_amt >= decimal128(45900, precision=7, scale=2)) and ($.ss_coupon_amt <= decimal128(145900, precision=7, scale=2)))) or (($.ss_wholesale_cost >= decimal128(5700, precision=7, scale=2)) and ($.ss_wholesale_cost <= decimal128(7700, precision=7, scale=2))))", + "(0i64 <= $.ss_quantity <= 5i64)" + ], + "Projections": "ss_list_price", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_list_price", + "ss_list_price", + "ss_list_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": [ + "avg(#0)", + "count(#1)", + "count(DISTINCT #2)" + ] + } + } + ], + "extra_info": {} + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "B1_LP", + "B1_CNT", + "B1_CNTD", + "B2_LP", + "B2_CNT", + "B2_CNTD", + "B3_LP", + "B3_CNT", + "B3_CNTD", + "B4_LP", + "B4_CNT", + "B4_CNTD", + "B5_LP", + "B5_CNT", + "B5_CNTD", + "B6_LP", + "B6_CNT", + "B6_CNTD" + ], + "Estimated Cardinality": "0" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q29.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q29.slt.no new file mode 100644 index 00000000000..74d7a252434 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q29.slt.no @@ -0,0 +1,1127 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + i_item_desc, + s_store_id, + s_store_name, + sum(ss_quantity) AS store_sales_quantity, + sum(sr_return_quantity) AS store_returns_quantity, + sum(cs_quantity) AS catalog_sales_quantity +FROM store_sales, + store_returns, + catalog_sales, + date_dim d1, + date_dim d2, + date_dim d3, + store, + item +WHERE d1.d_moy = 9 + AND d1.d_year = 1999 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND ss_customer_sk = sr_customer_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND sr_returned_date_sk = d2.d_date_sk + AND d2.d_moy BETWEEN 9 AND 9 + 3 + AND d2.d_year = 1999 + AND sr_customer_sk = cs_bill_customer_sk + AND sr_item_sk = cs_item_sk + AND cs_sold_date_sk = d3.d_date_sk + AND d3.d_year IN (1999, + 1999+1, + 1999+2) +GROUP BY i_item_id, + i_item_desc, + s_store_id, + s_store_name +ORDER BY i_item_id, + i_item_desc, + s_store_id, + s_store_name +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_moy = CAST(9 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))", + "(d_date_sk = ss_sold_date_sk)", + "(i_item_sk = ss_item_sk)", + "(s_store_sk = ss_store_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)", + "(sr_returned_date_sk = d_date_sk)", + "(d_moy >= CAST(9 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))", + "(sr_customer_sk = cs_bill_customer_sk)", + "(sr_item_sk = cs_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(d_moy <= CAST((9 + 3) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name" + ], + "Expressions": [ + "sum(ss_quantity)", + "sum(sr_return_quantity)", + "sum(cs_quantity)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "store_sales_quantity", + "store_returns_quantity", + "catalog_sales_quantity" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "memory.main.store.s_store_id", + "memory.main.store.s_store_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_quantity" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(9i64 <= $.d_moy <= 12i64)", + "($.d_year = 1999i64)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "5713" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_item_sk = i_item_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 9i64)", + "($.d_year = 1999i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "11532" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11532" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_item_sk = ss_item_sk)", + "(cs_bill_customer_sk = ss_customer_sk)" + ], + "Estimated Cardinality": "57974" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Expressions": [ + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#0", + "__internal_compress_integral_usmallint(#7, 2450815)" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name" + ], + "Expressions": [ + "sum(ss_quantity)", + "sum(sr_return_quantity)", + "sum(cs_quantity)" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "store_sales_quantity", + "store_returns_quantity", + "catalog_sales_quantity" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_quantity" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=1999", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "5713" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_item_sk = i_item_sk", + "ss_customer_sk = sr_customer_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1999", + "d_moy=9" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "11532" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11532" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_item_sk = ss_item_sk", + "cs_bill_customer_sk = ss_customer_sk" + ], + "Estimated Cardinality": "57974" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Projections": [ + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#0", + "__internal_compress_integral_usmallint(#7, 2450815)" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "s_store_id", + "s_store_name", + "ss_quantity", + "sr_return_quantity", + "cs_quantity" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)", + "sum(#6)" + ], + "Estimated Cardinality": "57974" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "memory.main.store.s_store_id ASC", + "memory.main.store.s_store_name ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q3.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q3.slt.no new file mode 100644 index 00000000000..9801d3a21ac --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q3.slt.no @@ -0,0 +1,525 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT dt.d_year, + item.i_brand_id brand_id, + item.i_brand brand, + sum(ss_ext_sales_price) sum_agg +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manufact_id = 128 + AND dt.d_moy=11 +GROUP BY dt.d_year, + item.i_brand, + item.i_brand_id +ORDER BY dt.d_year, + sum_agg DESC, + brand_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(ss_item_sk = i_item_sk)", + "(i_manufact_id = CAST(128 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "brand_id", + "brand", + "sum_agg" + ] + } + } + ], + "extra_info": { + "Order By": [ + "dt.d_year", + "sum(memory.main.store_sales.ss_ext_sales_price)", + "memory.main.item.i_brand_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manufact_id = 128i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#1, 1900)", + "#0", + "__internal_compress_integral_uinteger(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "#1", + "__internal_decompress_integral_bigint(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "brand_id", + "brand", + "sum_agg" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_moy=11", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manufact_id=128", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#1, 1900)", + "#0", + "__internal_compress_integral_uinteger(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand", + "i_brand_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "#1", + "__internal_decompress_integral_bigint(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "brand_id", + "brand", + "sum_agg" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "dt.d_year ASC", + "sum(memory.main.store_sales.ss_ext_sales_price) DESC", + "memory.main.item.i_brand_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q30.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q30.slt.no new file mode 100644 index 00000000000..2921fec29c0 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q30.slt.no @@ -0,0 +1,1088 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH customer_total_return AS + (SELECT wr_returning_customer_sk AS ctr_customer_sk, + ca_state AS ctr_state, + sum(wr_return_amt) AS ctr_total_return + FROM web_returns, + date_dim, + customer_address + WHERE wr_returned_date_sk = d_date_sk + AND d_year = 2002 + AND wr_returning_addr_sk = ca_address_sk + GROUP BY wr_returning_customer_sk, + ca_state) +SELECT c_customer_id, + c_salutation, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_day, + c_birth_month, + c_birth_year, + c_birth_country, + c_login, + c_email_address, + c_last_review_date_sk, + ctr_total_return +FROM customer_total_return ctr1, + customer_address, + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_state = ctr2.ctr_state) + AND ca_address_sk = c_current_addr_sk + AND ca_state = 'GA' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id NULLS FIRST, + c_salutation NULLS FIRST, + c_first_name NULLS FIRST, + c_last_name NULLS FIRST, + c_preferred_cust_flag NULLS FIRST, + c_birth_day NULLS FIRST, + c_birth_month NULLS FIRST, + c_birth_year NULLS FIRST, + c_birth_country NULLS FIRST, + c_login NULLS FIRST, + c_email_address NULLS FIRST, + c_last_review_date_sk NULLS FIRST, + ctr_total_return NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(wr_returned_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(wr_returning_addr_sk = ca_address_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "wr_returning_customer_sk", + "ca_state" + ], + "Expressions": "sum(wr_return_amt)" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_state", + "ctr_total_return" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "(ctr_state = ctr_state)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ctr_total_return)" + } + } + ], + "extra_info": { + "Expressions": "(avg(ctr_total_return) * CAST(1.2 AS DOUBLE))" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "(ca_address_sk = c_current_addr_sk)", + "(ca_state = CAST('GA' AS VARCHAR))", + "(ctr_customer_sk = c_customer_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_id", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk", + "ctr_total_return" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_customer_id", + "memory.main.customer.c_salutation", + "memory.main.customer.c_first_name", + "memory.main.customer.c_last_name", + "memory.main.customer.c_preferred_cust_flag", + "memory.main.customer.c_birth_day", + "memory.main.customer.c_birth_month", + "memory.main.customer.c_birth_year", + "memory.main.customer.c_birth_country", + "memory.main.customer.c_login", + "memory.main.customer.c_email_address", + "memory.main.customer.c_last_review_date_sk", + "ctr1.ctr_total_return" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returning_customer_sk", + "wr_returning_addr_sk", + "wr_return_amt" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "(2450865i64 <= $.d_date_sk <= 2452974i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = wr_returning_addr_sk)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 2)", + "#2" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": [ + "wr_returning_customer_sk", + "ca_state" + ], + "Expressions": "sum(wr_return_amt)", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2)", + "#1", + "#2" + ], + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_state", + "ctr_total_return" + ], + "Estimated Cardinality": "2920" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_addr_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_state = \"GA\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ctr_customer_sk)", + "Estimated Cardinality": "829" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "782" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ctr_state = ctr_state)", + "Estimated Cardinality": "324" + } + } + ], + "extra_info": { + "Groups": "ctr_state", + "Expressions": "avg(ctr_total_return)", + "Estimated Cardinality": "162" + } + } + ], + "extra_info": { + "Expressions": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_state" + ], + "Estimated Cardinality": "162" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(ctr_state IS NOT DISTINCT FROM ctr_state)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "829" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_id", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk", + "ctr_total_return" + ], + "Estimated Cardinality": "829" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_returned_date_sk", + "wr_returning_customer_sk", + "wr_returning_addr_sk", + "wr_return_amt" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = wr_returning_addr_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 2)", + "#2" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "wr_returning_customer_sk", + "ca_state", + "wr_return_amt" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2)", + "#1", + "#2" + ], + "Estimated Cardinality": "2920" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_current_addr_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_state='GA'", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ctr_customer_sk", + "Estimated Cardinality": "829" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "782" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ctr_state = ctr_state", + "Estimated Cardinality": "324" + } + } + ], + "extra_info": { + "Projections": [ + "ctr_state", + "ctr_total_return" + ], + "Estimated Cardinality": "324" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "162" + } + } + ], + "extra_info": { + "Projections": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_state" + ], + "Estimated Cardinality": "162" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_state IS NOT DISTINCT FROM ctr_state", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#12", + "Aggregates": "", + "Estimated Cardinality": "782" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_state IS NOT DISTINCT FROM ctr_state", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "829" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12" + ], + "Estimated Cardinality": "829" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer.c_customer_id ASC", + "memory.main.customer.c_salutation ASC", + "memory.main.customer.c_first_name ASC", + "memory.main.customer.c_last_name ASC", + "memory.main.customer.c_preferred_cust_flag ASC", + "memory.main.customer.c_birth_day ASC", + "memory.main.customer.c_birth_month ASC", + "memory.main.customer.c_birth_year ASC", + "memory.main.customer.c_birth_country ASC", + "memory.main.customer.c_login ASC", + "memory.main.customer.c_email_address ASC", + "memory.main.customer.c_last_review_date_sk ASC", + "ctr1.ctr_total_return ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q31.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q31.slt.no new file mode 100644 index 00000000000..002f57ff2af --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q31.slt.no @@ -0,0 +1,1631 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss AS + (SELECT ca_county, + d_qoy, + d_year, + sum(ss_ext_sales_price) AS store_sales + FROM store_sales, + date_dim, + customer_address + WHERE ss_sold_date_sk = d_date_sk + AND ss_addr_sk=ca_address_sk + GROUP BY ca_county, + d_qoy, + d_year), + ws AS + (SELECT ca_county, + d_qoy, + d_year, + sum(ws_ext_sales_price) AS web_sales + FROM web_sales, + date_dim, + customer_address + WHERE ws_sold_date_sk = d_date_sk + AND ws_bill_addr_sk=ca_address_sk + GROUP BY ca_county, + d_qoy, + d_year) +SELECT ss1.ca_county , + ss1.d_year , + (ws2.web_sales*1.0000)/ws1.web_sales web_q1_q2_increase , + (ss2.store_sales*1.0000)/ss1.store_sales store_q1_q2_increase , + (ws3.web_sales*1.0000)/ws2.web_sales web_q2_q3_increase , + (ss3.store_sales*1.0000)/ss2.store_sales store_q2_q3_increase +FROM ss ss1 , + ss ss2 , + ss ss3 , + ws ws1 , + ws ws2 , + ws ws3 +WHERE ss1.d_qoy = 1 + AND ss1.d_year = 2000 + AND ss1.ca_county = ss2.ca_county + AND ss2.d_qoy = 2 + AND ss2.d_year = 2000 + AND ss2.ca_county = ss3.ca_county + AND ss3.d_qoy = 3 + AND ss3.d_year = 2000 + AND ss1.ca_county = ws1.ca_county + AND ws1.d_qoy = 1 + AND ws1.d_year = 2000 + AND ws1.ca_county = ws2.ca_county + AND ws2.d_qoy = 2 + AND ws2.d_year = 2000 + AND ws1.ca_county = ws3.ca_county + AND ws3.d_qoy = 3 + AND ws3.d_year = 2000 + AND CASE + WHEN ws1.web_sales > 0 THEN (ws2.web_sales*1.0000)/ws1.web_sales + ELSE NULL + END > CASE + WHEN ss1.store_sales > 0 THEN (ss2.store_sales*1.0000)/ss1.store_sales + ELSE NULL + END + AND CASE + WHEN ws2.web_sales > 0 THEN (ws3.web_sales*1.0000)/ws2.web_sales + ELSE NULL + END > CASE + WHEN ss2.store_sales > 0 THEN (ss3.store_sales*1.0000)/ss2.store_sales + ELSE NULL + END +ORDER BY ss1.ca_county; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_addr_sk = ca_address_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ca_county", + "d_qoy", + "d_year" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_qoy", + "d_year", + "store_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(ws_bill_addr_sk = ca_address_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ca_county", + "d_qoy", + "d_year" + ], + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_qoy", + "d_year", + "web_sales" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = CAST(1 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(ca_county = ca_county)", + "(d_qoy = CAST(2 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(ca_county = ca_county)", + "(d_qoy = CAST(3 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(ca_county = ca_county)", + "(d_qoy = CAST(1 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(ca_county = ca_county)", + "(d_qoy = CAST(2 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(ca_county = ca_county)", + "(d_qoy = CAST(3 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))", + "(CASE WHEN ((web_sales > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((web_sales * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END > CASE WHEN ((store_sales > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((store_sales * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END)", + "(CASE WHEN ((web_sales > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((web_sales * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END > CASE WHEN ((store_sales > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST((store_sales * CAST(1.0000 AS DECIMAL(38,4))) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_year", + "web_q1_q2_increase", + "store_q1_q2_increase", + "web_q2_q3_increase", + "store_q2_q3_increase" + ] + } + } + ], + "extra_info": { + "Order By": "ss1.ca_county" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.d_qoy = 1i64) or ($.d_qoy = 2i64)) or ($.d_qoy = 3i64))", + "((($.d_qoy = 1i64) or ($.d_qoy = 2i64)) or ($.d_qoy = 3i64))", + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_county" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 2000)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "ca_county", + "d_qoy", + "d_year" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 2000)", + "#3" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_qoy", + "d_year", + "store_sales" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.d_qoy = 1i64) or ($.d_qoy = 2i64)) or ($.d_qoy = 3i64))", + "((($.d_qoy = 1i64) or ($.d_qoy = 2i64)) or ($.d_qoy = 3i64))", + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_county" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 2000)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Groups": [ + "ca_county", + "d_qoy", + "d_year" + ], + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 2000)", + "#3" + ], + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_qoy", + "d_year", + "web_sales" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 3)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 1)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 2)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 1)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 2)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_qoy = 3)", + "(d_year = 2000)" + ], + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_county = ca_county)", + "Estimated Cardinality": "2863" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_county = ca_county)", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_county = ca_county)", + "Estimated Cardinality": "460" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_county = ca_county)", + "Estimated Cardinality": "371" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((web_sales > 0.00)) THEN ((CAST((web_sales * 1.0000) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE NULL END > CASE WHEN ((store_sales > 0.00)) THEN ((CAST((store_sales * 1.0000) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE NULL END)", + "Estimated Cardinality": "371" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_county = ca_county)", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((web_sales > 0.00)) THEN ((CAST((web_sales * 1.0000) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE NULL END > CASE WHEN ((store_sales > 0.00)) THEN ((CAST((store_sales * 1.0000) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE NULL END)", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_county", + "d_year", + "web_q1_q2_increase", + "store_q1_q2_increase", + "web_q2_q3_increase", + "store_q2_q3_increase" + ], + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Order By": "ss1.ca_county", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "1", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0", + "Estimated Cardinality": "63672694431946" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_county" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 2000)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "ca_county", + "d_qoy", + "d_year", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 2000)", + "#3" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_county" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 2000)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "ca_county", + "d_qoy", + "d_year", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 2000)", + "#3" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 3) AND (d_year = 2000))", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#3" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 1) AND (d_year = 2000))", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#2", + "#3" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 2) AND (d_year = 2000))", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#3" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 1) AND (d_year = 2000))", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#3" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 2) AND (d_year = 2000))", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#3" + ], + "Estimated Cardinality": "14321" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Expression": "((d_qoy = 3) AND (d_year = 2000))", + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#3" + ], + "Estimated Cardinality": "14321" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_county = ca_county", + "Estimated Cardinality": "2863" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_county = ca_county", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_county = ca_county", + "Estimated Cardinality": "460" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_county = ca_county", + "Estimated Cardinality": "371" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((web_sales > 0.00)) THEN ((CAST((web_sales * 1.0000) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE NULL END > CASE WHEN ((store_sales > 0.00)) THEN ((CAST((store_sales * 1.0000) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE NULL END)", + "Estimated Cardinality": "371" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_county = ca_county", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((web_sales > 0.00)) THEN ((CAST((web_sales * 1.0000) AS DOUBLE) / CAST(web_sales AS DOUBLE))) ELSE NULL END > CASE WHEN ((store_sales > 0.00)) THEN ((CAST((store_sales * 1.0000) AS DOUBLE) / CAST(store_sales AS DOUBLE))) ELSE NULL END)", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Projections": [ + "ca_county", + "d_year", + "web_q1_q2_increase", + "store_q1_q2_increase", + "web_q2_q3_increase", + "store_q2_q3_increase" + ], + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "Order By": "ss1.ca_county ASC" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "1", + "Estimated Cardinality": "63672694431946" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0", + "Estimated Cardinality": "63672694431946" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q32.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q32.slt.no new file mode 100644 index 00000000000..f87efe167df --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q32.slt.no @@ -0,0 +1,852 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT sum(cs_ext_discount_amt) AS "excess discount amount" +FROM catalog_sales , + item , + date_dim +WHERE i_manufact_id = 977 + AND i_item_sk = cs_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = cs_sold_date_sk + AND cs_ext_discount_amt > + ( SELECT 1.3 * avg(cs_ext_discount_amt) + FROM catalog_sales , + date_dim + WHERE cs_item_sk = i_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = cs_sold_date_sk ) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = i_item_sk)", + "(d_date >= CAST('2000-01-27' AS DATE))", + "(d_date_sk = cs_sold_date_sk)", + "(d_date <= CAST('2000-04-26' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(cs_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(1.3 AS DOUBLE) * avg(cs_ext_discount_amt))" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_manufact_id = CAST(977 AS BIGINT))", + "(i_item_sk = cs_item_sk)", + "(d_date >= CAST('2000-01-27' AS DATE))", + "(d_date_sk = cs_sold_date_sk)", + "(CAST(cs_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "(d_date <= CAST('2000-04-26' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(cs_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "excess discount amount" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_discount_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manufact_id = 977i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_discount_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "26040" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Groups": "i_item_sk", + "Expressions": "avg(cs_ext_discount_amt)", + "Estimated Cardinality": "13020" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "13020" + } + } + ], + "extra_info": { + "Expressions": [ + "(1.3 * avg(cs_ext_discount_amt))", + "i_item_sk" + ], + "Estimated Cardinality": "13020" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(i_item_sk IS NOT DISTINCT FROM i_item_sk)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(cs_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(cs_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "excess discount amount", + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "STREAMING_LIMIT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_discount_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manufact_id=977", + "Projections": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_discount_amt" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "26040" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_sk", + "cs_ext_discount_amt" + ], + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "13020" + } + } + ], + "extra_info": { + "Projections": [ + "(1.3 * avg(cs_ext_discount_amt))", + "i_item_sk" + ], + "Estimated Cardinality": "13020" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_item_sk IS NOT DISTINCT FROM i_item_sk", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_item_sk IS NOT DISTINCT FROM i_item_sk", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(cs_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": "cs_ext_discount_amt", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Aggregates": "sum(#0)" + } + } + ], + "extra_info": {} + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q33.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q33.slt.no new file mode 100644 index 00000000000..af35f4bbc98 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q33.slt.no @@ -0,0 +1,2278 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss AS + ( SELECT i_manufact_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id), + cs AS + ( SELECT i_manufact_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id), + ws AS + ( SELECT i_manufact_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_manufact_id IN + (SELECT i_manufact_id + FROM item + WHERE i_category IN ('Electronics')) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 5 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_manufact_id) +SELECT i_manufact_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_manufact_id +ORDER BY total_sales +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category IN (CAST('Electronics' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_manufact_id = #[45.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(5 AS BIGINT))", + "(ss_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category IN (CAST('Electronics' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_manufact_id = #[100.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(5 AS BIGINT))", + "(cs_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(cs_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category IN (CAST('Electronics' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_manufact_id = #[155.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ws_item_sk = i_item_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(5 AS BIGINT))", + "(ws_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(total_sales)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Order By": "sum(tmp1.total_sales)" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cs", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 5i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_manufact_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 5i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_manufact_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(cs_ext_sales_price)", + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 5i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2864" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_manufact_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "i_manufact_id", + "Expressions": "sum(total_sales)", + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=5" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Projections": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_manufact_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "2297" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=5" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Projections": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_manufact_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "1143" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=5" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "2864" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Electronics\"], $.i_category)", + "Projections": "i_manufact_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_manufact_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "total_sales" + ], + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "sum(tmp1.total_sales) ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q34.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q34.slt.no new file mode 100644 index 00000000000..3e2e75f2035 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q34.slt.no @@ -0,0 +1,890 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_last_name , + c_first_name , + c_salutation , + c_preferred_cust_flag , + ss_ticket_number , + cnt +FROM + (SELECT ss_ticket_number , + ss_customer_sk , + count(*) cnt + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND (date_dim.d_dom BETWEEN 1 AND 3 + OR date_dim.d_dom BETWEEN 25 AND 28) + AND (household_demographics.hd_buy_potential = '>10000' + OR household_demographics.hd_buy_potential = 'Unknown') + AND household_demographics.hd_vehicle_count > 0 + AND (CASE + WHEN household_demographics.hd_vehicle_count > 0 THEN (household_demographics.hd_dep_count*1.000)/ household_demographics.hd_vehicle_count + ELSE NULL + END) > 1.2 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_county = 'Williamson County' + GROUP BY ss_ticket_number, + ss_customer_sk) dn, + customer +WHERE ss_customer_sk = c_customer_sk + AND cnt BETWEEN 15 AND 20 +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + c_salutation NULLS FIRST, + c_preferred_cust_flag DESC NULLS FIRST, + ss_ticket_number NULLS FIRST; +---- +logical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(((d_dom >= CAST(1 AS BIGINT)) AND (d_dom <= CAST(3 AS BIGINT))) OR ((d_dom >= CAST(25 AS BIGINT)) AND (d_dom <= CAST(28 AS BIGINT))))", + "((hd_buy_potential = CAST('>10000' AS VARCHAR)) OR (hd_buy_potential = CAST('Unknown' AS VARCHAR)))", + "(hd_vehicle_count > CAST(0 AS INTEGER))", + "(CASE WHEN ((hd_vehicle_count > CAST(0 AS INTEGER))) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * CAST(1.000 AS DECIMAL(23,3))) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END > CAST(1.2 AS DOUBLE))", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(s_county = CAST('Williamson County' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "cnt" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_customer_sk = c_customer_sk)", + "(cnt >= CAST(15 AS BIGINT))", + "(cnt <= CAST(20 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name", + "memory.main.customer.c_first_name", + "memory.main.customer.c_salutation", + "memory.main.customer.c_preferred_cust_flag", + "dn.ss_ticket_number" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.d_dom >= 1i64) and ($.d_dom <= 3i64)) or (($.d_dom >= 25i64) and ($.d_dom <= 28i64)))", + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_county = \"Williamson County\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.hd_buy_potential = \">10000\") or ($.hd_buy_potential = \"Unknown\"))", + "($.hd_vehicle_count > 0i32)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_dep_count", + "hd_vehicle_count" + ], + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((hd_vehicle_count > 0)) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * 1.000) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE NULL END > 1.2)", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Expressions": "count_star()", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": "(cnt BETWEEN 15 AND 20)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "cnt" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name", + "memory.main.customer.c_first_name", + "memory.main.customer.c_salutation", + "memory.main.customer.c_preferred_cust_flag", + "dn.ss_ticket_number" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ] + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "((($.d_dom >= 1i64) and ($.d_dom <= 3i64)) or (($.d_dom >= 25i64) and ($.d_dom <= 28i64)))", + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_county='Williamson County'", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.hd_buy_potential = \">10000\") or ($.hd_buy_potential = \"Unknown\"))", + "($.hd_vehicle_count > 0i32)" + ], + "Projections": [ + "hd_demo_sk", + "hd_dep_count", + "hd_vehicle_count" + ], + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((hd_vehicle_count > 0)) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * 1.000) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE NULL END > 1.2)", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "count_star()", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expression": "(cnt BETWEEN 15 AND 20)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name ASC", + "memory.main.customer.c_first_name ASC", + "memory.main.customer.c_salutation ASC", + "memory.main.customer.c_preferred_cust_flag DESC", + "dn.ss_ticket_number ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "0" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q35.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q35.slt.no new file mode 100644 index 00000000000..7932c5a6ed5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q35.slt.no @@ -0,0 +1,1741 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + count(*) cnt1, + min(cd_dep_count) min1, + max(cd_dep_count) max1, + avg(cd_dep_count) avg1, + cd_dep_employed_count, + count(*) cnt2, + min(cd_dep_employed_count) min2, + max(cd_dep_employed_count) max2, + avg(cd_dep_employed_count) avg2, + cd_dep_college_count, + count(*) cnt3, + min(cd_dep_college_count), + max(cd_dep_college_count), + avg(cd_dep_college_count) +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4) + AND (EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4) + OR EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2002 + AND d_qoy < 4)) +GROUP BY ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +ORDER BY ca_state NULLS FIRST, + cd_gender NULLS FIRST, + cd_marital_status NULLS FIRST, + cd_dep_count NULLS FIRST, + cd_dep_employed_count NULLS FIRST, + cd_dep_college_count NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_qoy < CAST(4 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_qoy < CAST(4 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = cs_ship_customer_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_qoy < CAST(4 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_current_addr_sk = ca_address_sk)", + "(cd_demo_sk = c_current_cdemo_sk)", + "SUBQUERY", + "(SUBQUERY OR SUBQUERY)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Expressions": [ + "count_star()", + "min(cd_dep_count)", + "max(cd_dep_count)", + "avg(cd_dep_count)", + "min(cd_dep_employed_count)", + "max(cd_dep_employed_count)", + "avg(cd_dep_employed_count)", + "min(cd_dep_college_count)", + "max(cd_dep_college_count)", + "avg(cd_dep_college_count)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cnt1", + "min1", + "max1", + "avg1", + "cd_dep_employed_count", + "cnt2", + "min2", + "max2", + "avg2", + "cd_dep_college_count", + "cnt3", + "min(cd_dep_college_count)", + "max(cd_dep_college_count)", + "avg(cd_dep_college_count)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "ca.ca_state", + "memory.main.customer_demographics.cd_gender", + "memory.main.customer_demographics.cd_marital_status", + "memory.main.customer_demographics.cd_dep_count", + "memory.main.customer_demographics.cd_dep_employed_count", + "memory.main.customer_demographics.cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "192080" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "($.d_qoy < 4i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "($.d_qoy < 4i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2002i64)", + "($.d_qoy < 4i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_customer_sk = c_customer_sk)", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)" + } + } + ], + "extra_info": { + "Expressions": "(SUBQUERY OR SUBQUERY)", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Groups": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Expressions": [ + "count_star()", + "min(cd_dep_count)", + "max(cd_dep_count)", + "avg(cd_dep_count)", + "min(cd_dep_employed_count)", + "max(cd_dep_employed_count)", + "avg(cd_dep_employed_count)", + "min(cd_dep_college_count)", + "max(cd_dep_college_count)", + "avg(cd_dep_college_count)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cnt1", + "min1", + "max1", + "avg1", + "cd_dep_employed_count", + "cnt2", + "min2", + "max2", + "avg2", + "cd_dep_college_count", + "cnt3", + "min(cd_dep_college_count)", + "max(cd_dep_college_count)", + "avg(cd_dep_college_count)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416", + "Delim Index": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "2", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416", + "Delim Index": "2" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2002", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "3", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_customer_sk = c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "28105" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "0", + "Delim Index": "3" + } + } + ], + "extra_info": { + "Expression": "(SUBQUERY OR SUBQUERY)", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count", + "cd_dep_count", + "cd_dep_count", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_employed_count", + "cd_dep_employed_count", + "cd_dep_college_count", + "cd_dep_college_count", + "cd_dep_college_count" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Aggregates": [ + "count_star()", + "min(#6)", + "max(#7)", + "avg(#8)", + "min(#9)", + "max(#10)", + "avg(#11)", + "min(#12)", + "max(#13)", + "avg(#14)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Projections": [ + "ca_state", + "cd_gender", + "cd_marital_status", + "cd_dep_count", + "cnt1", + "min1", + "max1", + "avg1", + "cd_dep_employed_count", + "cnt2", + "min2", + "max2", + "avg2", + "cd_dep_college_count", + "cnt3", + "min(cd_dep_college_count)", + "max(cd_dep_college_count)", + "avg(cd_dep_college_count)" + ], + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "ca.ca_state ASC", + "memory.main.customer_demographics.cd_gender ASC", + "memory.main.customer_demographics.cd_marital_status ASC", + "memory.main.customer_demographics.cd_dep_count ASC", + "memory.main.customer_demographics.cd_dep_employed_count ASC", + "memory.main.customer_demographics.cd_dep_college_count ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q36.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q36.slt.no new file mode 100644 index 00000000000..59f4b12c273 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q36.slt.no @@ -0,0 +1,1364 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH results AS + (SELECT sum(ss_net_profit) AS ss_net_profit, + sum(ss_ext_sales_price) AS ss_ext_sales_price, + (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin , + i_category , + i_class , + 0 AS g_category, + 0 AS g_class + FROM store_sales , + date_dim d1 , + item , + store + WHERE d1.d_year = 2001 + AND d1.d_date_sk = ss_sold_date_sk + AND i_item_sk = ss_item_sk + AND s_store_sk = ss_store_sk + AND s_state ='TN' + GROUP BY i_category, + i_class) , + results_rollup AS + (SELECT gross_margin, + i_category, + i_class, + 0 AS t_category, + 0 AS t_class, + 0 AS lochierarchy + FROM results + UNION SELECT (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin, + i_category, + NULL AS i_class, + 0 AS t_category, + 1 AS t_class, + 1 AS lochierarchy + FROM results + GROUP BY i_category + UNION SELECT (sum(ss_net_profit)*1.0000)/sum(ss_ext_sales_price) AS gross_margin, + NULL AS i_category, + NULL AS i_class, + 1 AS t_category, + 1 AS t_class, + 2 AS lochierarchy + FROM results) +SELECT gross_margin, + i_category, + i_class, + lochierarchy, + rank() OVER ( PARTITION BY lochierarchy, + CASE + WHEN t_class = 0 THEN i_category + END + ORDER BY gross_margin ASC) AS rank_within_parent +FROM results_rollup +ORDER BY lochierarchy DESC NULLS FIRST, + CASE + WHEN lochierarchy = 0 THEN i_category + END NULLS FIRST, + rank_within_parent NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(2001 AS BIGINT))", + "(d_date_sk = ss_sold_date_sk)", + "(i_item_sk = ss_item_sk)", + "(s_store_sk = ss_store_sk)", + "(s_state = CAST('TN' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class" + ], + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_net_profit", + "ss_ext_sales_price", + "gross_margin", + "i_category", + "i_class", + "g_category", + "g_class" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": "i_category", + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY lochierarchy, CASE WHEN ((t_class = CAST(0 AS INTEGER))) THEN (i_category) ELSE CAST(NULL AS VARCHAR) END ORDER BY gross_margin ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN ((lochierarchy = CAST(0 AS INTEGER))) THEN (i_category) ELSE CAST(NULL AS VARCHAR) END" + ] + } + } + ], + "extra_info": { + "Order By": [ + "results_rollup.lochierarchy", + "#[59.5]", + "rank() OVER (PARTITION BY results_rollup.lochierarchy, CASE WHEN ((results_rollup.t_class = 0)) THEN (results_rollup.i_category) ELSE NULL END ORDER BY results_rollup.gross_margin ASC)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[59.0]", + "#[59.1]", + "#[59.2]", + "#[59.3]", + "#[59.4]" + ] + } + } + ], + "extra_info": { + "CTE Name": "results_rollup", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_class", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_state = \"TN\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class" + ], + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_net_profit", + "ss_ext_sales_price", + "gross_margin", + "i_category", + "i_class" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Groups": "i_category", + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ], + "Estimated Cardinality": "52275" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "52275" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "sum(ss_net_profit)", + "sum(ss_ext_sales_price)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 0)", + "__internal_compress_integral_utinyint(#4, 0)", + "__internal_compress_integral_utinyint(#5, 0)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57676", + "Distinct Targets": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_integer(#3, 0)", + "__internal_decompress_integral_integer(#4, 0)", + "__internal_decompress_integral_integer(#5, 0)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#4", + "#5" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY lochierarchy, CASE WHEN ((t_class = 0)) THEN (i_category) ELSE NULL END ORDER BY gross_margin ASC NULLS LAST)", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": [ + "gross_margin", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN ((lochierarchy = 0)) THEN (i_category) ELSE NULL END" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_class", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_state='TN'", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_class", + "ss_net_profit", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "ss_net_profit", + "ss_ext_sales_price", + "gross_margin", + "i_category", + "i_class" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "57676" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "ss_net_profit", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ], + "Estimated Cardinality": "52275" + } + } + ], + "extra_info": { + "Projections": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "52275" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "ss_net_profit", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Aggregates": [ + "sum(#0)", + "sum(#1)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Aggregates": "", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 0)", + "__internal_compress_integral_utinyint(#4, 0)", + "__internal_compress_integral_utinyint(#5, 0)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "gross_margin", + "i_category", + "i_class", + "t_category", + "t_class", + "lochierarchy" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Aggregates": "", + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_integer(#3, 0)", + "__internal_decompress_integral_integer(#4, 0)", + "__internal_decompress_integral_integer(#5, 0)" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#4", + "#5" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY lochierarchy, CASE WHEN ((t_class = 0)) THEN (i_category) ELSE NULL END ORDER BY gross_margin ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Projections": [ + "gross_margin", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN ((lochierarchy = 0)) THEN (i_category) ELSE NULL END" + ], + "Estimated Cardinality": "57676" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "results_rollup.lochierarchy DESC", + "#5 ASC", + "rank() OVER (PARTITION BY results_rollup.lochierarchy, CASE WHEN ((results_rollup.t_class = 0)) THEN (results_rollup.i_category) ELSE NULL END ORDER BY results_rollup.gross_margin ASC) ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "results", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q37.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q37.slt.no new file mode 100644 index 00000000000..0d854d7581f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q37.slt.no @@ -0,0 +1,586 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + i_item_desc, + i_current_price +FROM item, + inventory, + date_dim, + catalog_sales +WHERE i_current_price BETWEEN 68 AND 68 + 30 + AND inv_item_sk = i_item_sk + AND d_date_sk=inv_date_sk + AND d_date BETWEEN cast('2000-02-01' AS date) AND cast('2000-04-01' AS date) + AND i_manufact_id IN (677, + 940, + 694, + 808) + AND inv_quantity_on_hand BETWEEN 100 AND 500 + AND cs_item_sk = i_item_sk +GROUP BY i_item_id, + i_item_desc, + i_current_price +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(i_current_price AS DECIMAL(12,2)) >= CAST(68 AS DECIMAL(12,2)))", + "(inv_item_sk = i_item_sk)", + "(d_date_sk = inv_date_sk)", + "(d_date >= CAST('2000-02-01' AS DATE))", + "(i_manufact_id IN (CAST(677 AS BIGINT), CAST(940 AS BIGINT), CAST(694 AS BIGINT), CAST(808 AS BIGINT)))", + "(inv_quantity_on_hand >= CAST(100 AS INTEGER))", + "(cs_item_sk = i_item_sk)", + "(CAST(i_current_price AS DECIMAL(12,2)) <= CAST((68 + 30) AS DECIMAL(12,2)))", + "(d_date <= CAST('2000-04-01' AS DATE))", + "(inv_quantity_on_hand <= CAST(500 AS INTEGER))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.item.i_item_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "cs_item_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(100i32 <= $.inv_quantity_on_hand <= 500i32)", + "Function": "Vortex Scan", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk" + ], + "Estimated Cardinality": "46980" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-02-01 <= $.d_date <= 2000-04-01)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "46980" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([677i64, 940i64, 694i64, 808i64], $.i_manufact_id)", + "(decimal128(6800, precision=7, scale=2) <= $.i_current_price <= decimal128(9800, precision=7, scale=2))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_item_sk = i_item_sk)", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "18747238" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "18747238" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Expressions": "", + "Estimated Cardinality": "15129981" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "15129981" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "15129981" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "cs_item_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(100i32 <= $.inv_quantity_on_hand <= 500i32)", + "Projections": [ + "inv_date_sk", + "inv_item_sk" + ], + "Estimated Cardinality": "46980" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-02-01 <= $.d_date <= 2000-04-01)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "46980" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([677i64, 940i64, 694i64, 808i64], $.i_manufact_id)", + "(decimal128(6800, precision=7, scale=2) <= $.i_current_price <= decimal128(9800, precision=7, scale=2))" + ], + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_item_sk = i_item_sk", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "18747238" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "18747238" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "18747238" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "15129981" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.item.i_item_id ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q38.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q38.slt.no new file mode 100644 index 00000000000..fb3a9058423 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q38.slt.no @@ -0,0 +1,1493 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT count(*) +FROM + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM store_sales, + date_dim, + customer + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 INTERSECT + SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM catalog_sales, + date_dim, + customer WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 INTERSECT + SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM web_sales, + date_dim, + customer WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk + AND web_sales.ws_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 ) hot_cust +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(cs_bill_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(ws_bill_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "STREAMING_LIMIT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q39.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q39.slt.no new file mode 100644 index 00000000000..0b0bd9ab9a0 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q39.slt.no @@ -0,0 +1,969 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH inv AS + (SELECT w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy, + stdev, + mean, + CASE mean + WHEN 0 THEN NULL + ELSE stdev/mean + END cov + FROM + (SELECT w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy, + stddev_samp(inv_quantity_on_hand)*1.000 stdev, + avg(inv_quantity_on_hand) mean + FROM inventory, + item, + warehouse, + date_dim + WHERE inv_item_sk = i_item_sk + AND inv_warehouse_sk = w_warehouse_sk + AND inv_date_sk = d_date_sk + AND d_year =2001 + GROUP BY w_warehouse_name, + w_warehouse_sk, + i_item_sk, + d_moy) foo + WHERE CASE mean + WHEN 0 THEN 0 + ELSE stdev/mean + END > 1) +SELECT inv1.w_warehouse_sk wsk1, + inv1.i_item_sk isk1, + inv1.d_moy dmoy1, + inv1.mean mean1, + inv1.cov cov1, + inv2.w_warehouse_sk, + inv2.i_item_sk, + inv2.d_moy, + inv2.mean, + inv2.cov +FROM inv inv1, + inv inv2 +WHERE inv1.i_item_sk = inv2.i_item_sk + AND inv1.w_warehouse_sk = inv2.w_warehouse_sk + AND inv1.d_moy=1 + AND inv2.d_moy=1+1 +ORDER BY inv1.w_warehouse_sk NULLS FIRST, + inv1.i_item_sk NULLS FIRST, + inv1.d_moy NULLS FIRST, + inv1.mean NULLS FIRST, + inv1.cov NULLS FIRST, + inv2.d_moy NULLS FIRST, + inv2.mean NULLS FIRST, + inv2.cov NULLS FIRST; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(inv_item_sk = i_item_sk)", + "(inv_warehouse_sk = w_warehouse_sk)", + "(inv_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sk", + "i_item_sk", + "d_moy" + ], + "Expressions": [ + "stddev_samp(CAST(inv_quantity_on_hand AS DOUBLE))", + "avg(inv_quantity_on_hand)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "stdev", + "mean" + ] + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((mean = CAST(0 AS DOUBLE))) THEN (CAST(0 AS DOUBLE)) ELSE (stdev / mean) END > CAST(1 AS DOUBLE))" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "stdev", + "mean", + "cov" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_item_sk = i_item_sk)", + "(w_warehouse_sk = w_warehouse_sk)", + "(d_moy = CAST(1 AS BIGINT))", + "(d_moy = CAST((1 + 1) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "wsk1", + "isk1", + "dmoy1", + "mean1", + "cov1", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "mean", + "cov" + ] + } + } + ], + "extra_info": { + "Order By": [ + "inv1.w_warehouse_sk", + "inv1.i_item_sk", + "inv1.d_moy", + "inv1.mean", + "inv1.cov", + "inv2.d_moy", + "inv2.mean", + "inv2.cov" + ] + } + } + ], + "extra_info": { + "CTE Name": "inv", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(($.d_moy = 1i64) or ($.d_moy = 2i64))", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "46967" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_item_sk = i_item_sk)", + "Estimated Cardinality": "46967" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "46967" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_utinyint(#3, 1)", + "#4" + ], + "Estimated Cardinality": "46967" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sk", + "i_item_sk", + "d_moy" + ], + "Expressions": [ + "stddev_samp(CAST(inv_quantity_on_hand AS DOUBLE))", + "avg(inv_quantity_on_hand)" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "#4", + "#5" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "stdev", + "mean" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((mean = 0.0)) THEN (0.0) ELSE (stdev / mean) END > 1.0)", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "mean", + "cov" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": "(d_moy = 1)", + "Estimated Cardinality": "46636" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expressions": "(d_moy = 2)", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_item_sk = i_item_sk)", + "(w_warehouse_sk = w_warehouse_sk)" + ], + "Estimated Cardinality": "9258" + } + } + ], + "extra_info": { + "Expressions": [ + "wsk1", + "isk1", + "dmoy1", + "mean1", + "cov1", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "mean", + "cov" + ], + "Estimated Cardinality": "9258" + } + } + ], + "extra_info": { + "Order By": [ + "inv1.w_warehouse_sk", + "inv1.i_item_sk", + "inv1.d_moy", + "inv1.mean", + "inv1.cov", + "inv2.d_moy", + "inv2.mean", + "inv2.cov" + ], + "Estimated Cardinality": "9258" + } + } + ], + "extra_info": { + "CTE Name": "inv", + "Table Index": "0", + "Estimated Cardinality": "9258" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "46967" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "i_item_sk", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_item_sk = i_item_sk", + "Estimated Cardinality": "46967" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "46967" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_utinyint(#3, 1)", + "#4" + ], + "Estimated Cardinality": "46967" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "CAST(inv_quantity_on_hand AS DOUBLE)", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "46967" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "stddev_samp(#4)", + "avg(#5)" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "#4", + "#5" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "stdev", + "mean" + ], + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((mean = 0.0)) THEN (0.0) ELSE (stdev / mean) END > 1.0)", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "mean", + "cov" + ], + "Estimated Cardinality": "46636" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expression": "(d_moy = 1)", + "Estimated Cardinality": "46636" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Expression": "(d_moy = 2)", + "Estimated Cardinality": "46636" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_item_sk = i_item_sk", + "w_warehouse_sk = w_warehouse_sk" + ], + "Estimated Cardinality": "9258" + } + } + ], + "extra_info": { + "Projections": [ + "wsk1", + "isk1", + "dmoy1", + "mean1", + "cov1", + "w_warehouse_sk", + "i_item_sk", + "d_moy", + "mean", + "cov" + ], + "Estimated Cardinality": "9258" + } + } + ], + "extra_info": { + "Order By": [ + "inv1.w_warehouse_sk ASC", + "inv1.i_item_sk ASC", + "inv1.d_moy ASC", + "inv1.mean ASC", + "inv1.cov ASC", + "inv2.d_moy ASC", + "inv2.mean ASC", + "inv2.cov ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "inv", + "Table Index": "0", + "Estimated Cardinality": "9258" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q4.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q4.slt.no new file mode 100644 index 00000000000..02c7d53aef0 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q4.slt.no @@ -0,0 +1,2585 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2)) year_total, + 'c' sale_type + FROM customer, + catalog_sales, + date_dim + WHERE c_customer_sk = cs_bill_customer_sk + AND cs_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + c_preferred_cust_flag customer_preferred_cust_flag, + c_birth_country customer_birth_country, + c_login customer_login, + c_email_address customer_email_address, + d_year dyear, + sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2)) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + GROUP BY c_customer_id, + c_first_name, + c_last_name, + c_preferred_cust_flag, + c_birth_country, + c_login, + c_email_address, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name, + t_s_secyear.customer_preferred_cust_flag +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_c_firstyear, + year_total t_c_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_c_secyear.customer_id + AND t_s_firstyear.customer_id = t_c_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_c_firstyear.sale_type = 'c' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_c_secyear.sale_type = 'c' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.dyear = 2001 + AND t_s_secyear.dyear = 2001+1 + AND t_c_firstyear.dyear = 2001 + AND t_c_secyear.dyear = 2001+1 + AND t_w_firstyear.dyear = 2001 + AND t_w_secyear.dyear = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_c_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_c_firstyear.year_total > 0 THEN t_c_secyear.year_total / t_c_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN t_s_secyear.year_total / t_s_firstyear.year_total + ELSE NULL + END + AND CASE + WHEN t_c_firstyear.year_total > 0 THEN t_c_secyear.year_total / t_c_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_w_firstyear.year_total > 0 THEN t_w_secyear.year_total / t_w_firstyear.year_total + ELSE NULL + END +ORDER BY t_s_secyear.customer_id NULLS FIRST, + t_s_secyear.customer_first_name NULLS FIRST, + t_s_secyear.customer_last_name NULLS FIRST, + t_s_secyear.customer_preferred_cust_flag NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((ss_ext_list_price - ss_ext_wholesale_cost) - ss_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ss_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / CAST(2 AS DOUBLE)))" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "customer_birth_country", + "customer_login", + "customer_email_address", + "dyear", + "year_total", + "sale_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = cs_bill_customer_sk)", + "(cs_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((cs_ext_list_price - cs_ext_wholesale_cost) - cs_ext_discount_amt) AS DECIMAL(10,2)) + CAST(cs_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / CAST(2 AS DOUBLE)))" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "customer_birth_country", + "customer_login", + "customer_email_address", + "dyear", + "year_total", + "sale_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((ws_ext_list_price - ws_ext_wholesale_cost) - ws_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ws_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / CAST(2 AS DOUBLE)))" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "customer_birth_country", + "customer_login", + "customer_email_address", + "dyear", + "year_total", + "sale_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('c' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('c' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(dyear = CAST(2001 AS BIGINT))", + "(dyear = CAST((2001 + 1) AS BIGINT))", + "(dyear = CAST(2001 AS BIGINT))", + "(dyear = CAST((2001 + 1) AS BIGINT))", + "(dyear = CAST(2001 AS BIGINT))", + "(dyear = CAST((2001 + 1) AS BIGINT))", + "(year_total > CAST(0 AS DOUBLE))", + "(year_total > CAST(0 AS DOUBLE))", + "(year_total > CAST(0 AS DOUBLE))", + "(CASE WHEN ((year_total > CAST(0 AS DOUBLE))) THEN ((year_total / year_total)) ELSE CAST(NULL AS DOUBLE) END > CASE WHEN ((year_total > CAST(0 AS DOUBLE))) THEN ((year_total / year_total)) ELSE CAST(NULL AS DOUBLE) END)", + "(CASE WHEN ((year_total > CAST(0 AS DOUBLE))) THEN ((year_total / year_total)) ELSE CAST(NULL AS DOUBLE) END > CASE WHEN ((year_total > CAST(0 AS DOUBLE))) THEN ((year_total / year_total)) ELSE CAST(NULL AS DOUBLE) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag" + ] + } + } + ], + "extra_info": { + "Order By": [ + "t_s_secyear.customer_id", + "t_s_secyear.customer_first_name", + "t_s_secyear.customer_last_name", + "t_s_secyear.customer_preferred_cust_flag" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((ss_ext_list_price - ss_ext_wholesale_cost) - ss_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ss_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0))", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((cs_ext_list_price - cs_ext_wholesale_cost) - cs_ext_discount_amt) AS DECIMAL(10,2)) + CAST(cs_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0))", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year" + ], + "Expressions": "sum((CAST((CAST(((ws_ext_list_price - ws_ext_wholesale_cost) - ws_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ws_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0))", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ] + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2002)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2002)", + "(sale_type = 'c')" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "1015036" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2001)", + "(year_total > 0.0)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2002)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "1015036" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "103029828" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2001)", + "(year_total > 0.0)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expressions": [ + "(dyear = 2001)", + "(year_total > 0.0)", + "(sale_type = 'c')" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "1015036" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Expressions": [ + "(CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END > CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END)", + "(CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END > CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END)" + ], + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag" + ], + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year", + "(CAST((CAST(((ss_ext_list_price - ss_ext_wholesale_cost) - ss_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ss_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#7", + "#8" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year", + "(CAST((CAST(((cs_ext_list_price - cs_ext_wholesale_cost) - cs_ext_discount_amt) AS DECIMAL(10,2)) + CAST(cs_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#7", + "#8" + ], + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_utinyint(#4, 1900)", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_country", + "c_login", + "c_email_address", + "d_year", + "(CAST((CAST(((ws_ext_list_price - ws_ext_wholesale_cost) - ws_ext_discount_amt) AS DECIMAL(10,2)) + CAST(ws_ext_sales_price AS DECIMAL(10,2))) AS DOUBLE) / 2.0)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "__internal_decompress_integral_bigint(#7, 1900)", + "#8" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) OR ((dyear = 2001) AND (year_total > 0.0)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#7", + "#8" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag", + "dyear", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": {} + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) AND (sale_type = 's'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#5" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) AND (sale_type = 'c'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "1015036" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2001) AND (year_total > 0.0) AND (sale_type = 'w'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2002) AND (sale_type = 'w'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "1015036" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "103029828" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2001) AND (year_total > 0.0) AND (sale_type = 's'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "100749" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Expression": "((dyear = 2001) AND (year_total > 0.0) AND (sale_type = 'c'))", + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#5" + ], + "Estimated Cardinality": "100749" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "1015036" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Expression": "((CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END > CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END) AND (CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END > CASE WHEN ((year_total > 0.0)) THEN ((year_total / year_total)) ELSE NULL END))", + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#7" + ], + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "customer_preferred_cust_flag" + ], + "Estimated Cardinality": "18446744073709551615" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "t_s_secyear.customer_id ASC", + "t_s_secyear.customer_first_name ASC", + "t_s_secyear.customer_last_name ASC", + "t_s_secyear.customer_preferred_cust_flag ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q40.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q40.slt.no new file mode 100644 index 00000000000..9caa861c0af --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q40.slt.no @@ -0,0 +1,694 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT w_state, + i_item_id, + sum(CASE + WHEN (cast(d_date AS date) < CAST ('2000-03-11' AS date)) THEN cs_sales_price - coalesce(cr_refunded_cash,0) + ELSE 0 + END) AS sales_before, + sum(CASE + WHEN (cast(d_date AS date) >= CAST ('2000-03-11' AS date)) THEN cs_sales_price - coalesce(cr_refunded_cash,0) + ELSE 0 + END) AS sales_after +FROM catalog_sales +LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number + AND cs_item_sk = cr_item_sk) ,warehouse, + item, + date_dim +WHERE i_current_price BETWEEN 0.99 AND 1.49 + AND i_item_sk = cs_item_sk + AND cs_warehouse_sk = w_warehouse_sk + AND cs_sold_date_sk = d_date_sk + AND d_date BETWEEN CAST ('2000-02-10' AS date) AND CAST ('2000-04-10' AS date) +GROUP BY w_state, + i_item_id +ORDER BY w_state, + i_item_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_current_price >= CAST(0.99 AS DECIMAL(7,2)))", + "(i_item_sk = cs_item_sk)", + "(cs_warehouse_sk = w_warehouse_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-02-10' AS DATE))", + "(i_current_price <= CAST(1.49 AS DECIMAL(7,2)))", + "(d_date <= CAST('2000-04-10' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_state", + "i_item_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_date < CAST('2000-03-11' AS DATE))) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))) ELSE CAST(0 AS DECIMAL(13,2)) END)", + "sum(CASE WHEN ((d_date >= CAST('2000-03-11' AS DATE))) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))) ELSE CAST(0 AS DECIMAL(13,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_state", + "i_item_id", + "sales_before", + "sales_after" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.warehouse.w_state", + "memory.main.item.i_item_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_order_number", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number", + "cr_refunded_cash" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(decimal128(99, precision=7, scale=2) <= $.i_current_price <= decimal128(149, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-02-10 <= $.d_date <= 2000-04-10)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "w_state", + "i_item_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_date < '2000-03-11'::DATE)) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), 0.00))) ELSE 0.00 END)", + "sum(CASE WHEN ((d_date >= '2000-03-11'::DATE)) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), 0.00))) ELSE 0.00 END)" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Expressions": [ + "w_state", + "i_item_id", + "sales_before", + "sales_after" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_order_number", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number", + "cr_refunded_cash" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "cs_order_number = cr_order_number", + "cs_item_sk = cr_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(decimal128(99, precision=7, scale=2) <= $.i_current_price <= decimal128(149, precision=7, scale=2))", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-02-10 <= $.d_date <= 2000-04-10)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "w_state", + "i_item_id", + "CASE WHEN ((d_date < '2000-03-11'::DATE)) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), 0.00))) ELSE 0.00 END", + "CASE WHEN ((d_date >= '2000-03-11'::DATE)) THEN ((CAST(cs_sales_price AS DECIMAL(13,2)) - COALESCE(CAST(cr_refunded_cash AS DECIMAL(12,2)), 0.00))) ELSE 0.00 END" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.warehouse.w_state ASC", + "memory.main.item.i_item_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q41.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q41.slt.no new file mode 100644 index 00000000000..86b3e4cb1d0 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q41.slt.no @@ -0,0 +1,533 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT distinct(i_product_name) +FROM item i1 +WHERE i_manufact_id BETWEEN 738 AND 738+40 + AND + (SELECT count(*) AS item_cnt + FROM item + WHERE (i_manufact = i1.i_manufact + AND ((i_category = 'Women' + AND (i_color = 'powder' + OR i_color = 'khaki') + AND (i_units = 'Ounce' + OR i_units = 'Oz') + AND (i_size = 'medium' + OR i_size = 'extra large')) + OR (i_category = 'Women' + AND (i_color = 'brown' + OR i_color = 'honeydew') + AND (i_units = 'Bunch' + OR i_units = 'Ton') + AND (i_size = 'N/A' + OR i_size = 'small')) + OR (i_category = 'Men' + AND (i_color = 'floral' + OR i_color = 'deep') + AND (i_units = 'N/A' + OR i_units = 'Dozen') + AND (i_size = 'petite' + OR i_size = 'petite')) + OR (i_category = 'Men' + AND (i_color = 'light' + OR i_color = 'cornflower') + AND (i_units = 'Box' + OR i_units = 'Pound') + AND (i_size = 'medium' + OR i_size = 'extra large')))) + OR (i_manufact = i1.i_manufact + AND ((i_category = 'Women' + AND (i_color = 'midnight' + OR i_color = 'snow') + AND (i_units = 'Pallet' + OR i_units = 'Gross') + AND (i_size = 'medium' + OR i_size = 'extra large')) + OR (i_category = 'Women' + AND (i_color = 'cyan' + OR i_color = 'papaya') + AND (i_units = 'Cup' + OR i_units = 'Dram') + AND (i_size = 'N/A' + OR i_size = 'small')) + OR (i_category = 'Men' + AND (i_color = 'orange' + OR i_color = 'frosted') + AND (i_units = 'Each' + OR i_units = 'Tbl') + AND (i_size = 'petite' + OR i_size = 'petite')) + OR (i_category = 'Men' + AND (i_color = 'forest' + OR i_color = 'ghost') + AND (i_units = 'Lb' + OR i_units = 'Bundle') + AND (i_size = 'medium' + OR i_size = 'extra large'))))) > 0 +ORDER BY i_product_name +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(((i_manufact = i_manufact) AND (((i_category = CAST('Women' AS VARCHAR)) AND ((i_color = CAST('powder' AS VARCHAR)) OR (i_color = CAST('khaki' AS VARCHAR))) AND ((i_units = CAST('Ounce' AS VARCHAR)) OR (i_units = CAST('Oz' AS VARCHAR))) AND ((i_size = CAST('medium' AS VARCHAR)) OR (i_size = CAST('extra large' AS VARCHAR)))) OR ((i_category = CAST('Women' AS VARCHAR)) AND ((i_color = CAST('brown' AS VARCHAR)) OR (i_color = CAST('honeydew' AS VARCHAR))) AND ((i_units = CAST('Bunch' AS VARCHAR)) OR (i_units = CAST('Ton' AS VARCHAR))) AND ((i_size = CAST('N/A' AS VARCHAR)) OR (i_size = CAST('small' AS VARCHAR)))) OR ((i_category = CAST('Men' AS VARCHAR)) AND ((i_color = CAST('floral' AS VARCHAR)) OR (i_color = CAST('deep' AS VARCHAR))) AND ((i_units = CAST('N/A' AS VARCHAR)) OR (i_units = CAST('Dozen' AS VARCHAR))) AND ((i_size = CAST('petite' AS VARCHAR)) OR (i_size = CAST('petite' AS VARCHAR)))) OR ((i_category = CAST('Men' AS VARCHAR)) AND ((i_color = CAST('light' AS VARCHAR)) OR (i_color = CAST('cornflower' AS VARCHAR))) AND ((i_units = CAST('Box' AS VARCHAR)) OR (i_units = CAST('Pound' AS VARCHAR))) AND ((i_size = CAST('medium' AS VARCHAR)) OR (i_size = CAST('extra large' AS VARCHAR)))))) OR ((i_manufact = i_manufact) AND (((i_category = CAST('Women' AS VARCHAR)) AND ((i_color = CAST('midnight' AS VARCHAR)) OR (i_color = CAST('snow' AS VARCHAR))) AND ((i_units = CAST('Pallet' AS VARCHAR)) OR (i_units = CAST('Gross' AS VARCHAR))) AND ((i_size = CAST('medium' AS VARCHAR)) OR (i_size = CAST('extra large' AS VARCHAR)))) OR ((i_category = CAST('Women' AS VARCHAR)) AND ((i_color = CAST('cyan' AS VARCHAR)) OR (i_color = CAST('papaya' AS VARCHAR))) AND ((i_units = CAST('Cup' AS VARCHAR)) OR (i_units = CAST('Dram' AS VARCHAR))) AND ((i_size = CAST('N/A' AS VARCHAR)) OR (i_size = CAST('small' AS VARCHAR)))) OR ((i_category = CAST('Men' AS VARCHAR)) AND ((i_color = CAST('orange' AS VARCHAR)) OR (i_color = CAST('frosted' AS VARCHAR))) AND ((i_units = CAST('Each' AS VARCHAR)) OR (i_units = CAST('Tbl' AS VARCHAR))) AND ((i_size = CAST('petite' AS VARCHAR)) OR (i_size = CAST('petite' AS VARCHAR)))) OR ((i_category = CAST('Men' AS VARCHAR)) AND ((i_color = CAST('forest' AS VARCHAR)) OR (i_color = CAST('ghost' AS VARCHAR))) AND ((i_units = CAST('Lb' AS VARCHAR)) OR (i_units = CAST('Bundle' AS VARCHAR))) AND ((i_size = CAST('medium' AS VARCHAR)) OR (i_size = CAST('extra large' AS VARCHAR)))))))" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "item_cnt" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_manufact_id >= CAST(738 AS BIGINT))", + "(SUBQUERY > CAST(0 AS BIGINT))", + "(i_manufact_id <= CAST((738 + 40) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": "i_product_name" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": "i_product_name" + } + } + ], + "extra_info": { + "Order By": "i1.i_product_name" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(738i64 <= $.i_manufact_id <= 778i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact", + "i_product_name" + ], + "Estimated Cardinality": "360" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "227" + } + }, + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(((((($.i_category = \"Women\") and (($.i_color = \"powder\") or ($.i_color = \"khaki\"))) and ((($.i_units = \"Ounce\") or ($.i_units = \"Oz\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))) or ((($.i_category = \"Women\") and (($.i_color = \"brown\") or ($.i_color = \"honeydew\"))) and ((($.i_units = \"Bunch\") or ($.i_units = \"Ton\")) and (($.i_size = \"N/A\") or ($.i_size = \"small\"))))) or (((($.i_category = \"Men\") and (($.i_color = \"floral\") or ($.i_color = \"deep\"))) and ((($.i_units = \"N/A\") or ($.i_units = \"Dozen\")) and ($.i_size = \"petite\"))) or ((($.i_category = \"Men\") and (($.i_color = \"light\") or ($.i_color = \"cornflower\"))) and ((($.i_units = \"Box\") or ($.i_units = \"Pound\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))))) or ((((($.i_category = \"Women\") and (($.i_color = \"midnight\") or ($.i_color = \"snow\"))) and ((($.i_units = \"Pallet\") or ($.i_units = \"Gross\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))) or ((($.i_category = \"Women\") and (($.i_color = \"cyan\") or ($.i_color = \"papaya\"))) and ((($.i_units = \"Cup\") or ($.i_units = \"Dram\")) and (($.i_size = \"N/A\") or ($.i_size = \"small\"))))) or (((($.i_category = \"Men\") and (($.i_color = \"orange\") or ($.i_color = \"frosted\"))) and ((($.i_units = \"Each\") or ($.i_units = \"Tbl\")) and ($.i_size = \"petite\"))) or ((($.i_category = \"Men\") and (($.i_color = \"forest\") or ($.i_color = \"ghost\"))) and ((($.i_units = \"Lb\") or ($.i_units = \"Bundle\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))))))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "(i_manufact IS NOT NULL)", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_manufact", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Groups": "i_manufact", + "Expressions": "count_star()", + "Estimated Cardinality": "36" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(i_manufact IS NOT DISTINCT FROM #0)", + "Estimated Cardinality": "227" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((item_cnt IS NULL)) THEN (0) ELSE item_cnt END", + "i_manufact" + ], + "Estimated Cardinality": "227" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "(i_manufact IS NOT DISTINCT FROM i_manufact)" + } + } + ], + "extra_info": { + "Expressions": "(SUBQUERY > 0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_product_name", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "360", + "Distinct Targets": "i_product_name" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(738i64 <= $.i_manufact_id <= 778i64)", + "Projections": [ + "i_manufact", + "i_product_name" + ], + "Estimated Cardinality": "360" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "227" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(((((($.i_category = \"Women\") and (($.i_color = \"powder\") or ($.i_color = \"khaki\"))) and ((($.i_units = \"Ounce\") or ($.i_units = \"Oz\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))) or ((($.i_category = \"Women\") and (($.i_color = \"brown\") or ($.i_color = \"honeydew\"))) and ((($.i_units = \"Bunch\") or ($.i_units = \"Ton\")) and (($.i_size = \"N/A\") or ($.i_size = \"small\"))))) or (((($.i_category = \"Men\") and (($.i_color = \"floral\") or ($.i_color = \"deep\"))) and ((($.i_units = \"N/A\") or ($.i_units = \"Dozen\")) and ($.i_size = \"petite\"))) or ((($.i_category = \"Men\") and (($.i_color = \"light\") or ($.i_color = \"cornflower\"))) and ((($.i_units = \"Box\") or ($.i_units = \"Pound\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))))) or ((((($.i_category = \"Women\") and (($.i_color = \"midnight\") or ($.i_color = \"snow\"))) and ((($.i_units = \"Pallet\") or ($.i_units = \"Gross\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))) or ((($.i_category = \"Women\") and (($.i_color = \"cyan\") or ($.i_color = \"papaya\"))) and ((($.i_units = \"Cup\") or ($.i_units = \"Dram\")) and (($.i_size = \"N/A\") or ($.i_size = \"small\"))))) or (((($.i_category = \"Men\") and (($.i_color = \"orange\") or ($.i_color = \"frosted\"))) and ((($.i_units = \"Each\") or ($.i_units = \"Tbl\")) and ($.i_size = \"petite\"))) or ((($.i_category = \"Men\") and (($.i_color = \"forest\") or ($.i_color = \"ghost\"))) and ((($.i_units = \"Lb\") or ($.i_units = \"Bundle\")) and (($.i_size = \"medium\") or ($.i_size = \"extra large\")))))))", + "Projections": "i_manufact", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expression": "(i_manufact IS NOT NULL)", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Projections": "i_manufact", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "count_star()", + "Estimated Cardinality": "36" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_manufact IS NOT DISTINCT FROM #0", + "Estimated Cardinality": "227" + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((item_cnt IS NULL)) THEN (0) ELSE item_cnt END", + "i_manufact" + ], + "Estimated Cardinality": "227" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "i_manufact IS NOT DISTINCT FROM i_manufact", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "227" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "i_manufact IS NOT DISTINCT FROM i_manufact", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(SUBQUERY > 0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Projections": "i_product_name", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "i1.i_product_name ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q42.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q42.slt.no new file mode 100644 index 00000000000..cf2d5ea108c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q42.slt.no @@ -0,0 +1,519 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT dt.d_year, + item.i_category_id, + item.i_category, + sum(ss_ext_sales_price) +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manager_id = 1 + AND dt.d_moy=11 + AND dt.d_year=2000 +GROUP BY dt.d_year, + item.i_category_id, + item.i_category +ORDER BY sum(ss_ext_sales_price) DESC,dt.d_year, + item.i_category_id, + item.i_category +LIMIT 100 ; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(ss_item_sk = i_item_sk)", + "(i_manager_id = CAST(1 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_category_id", + "i_category" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_category_id", + "i_category", + "sum(ss_ext_sales_price)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price)", + "dt.d_year", + "memory.main.item.i_category_id", + "memory.main.item.i_category" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manager_id = 1i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_category_id", + "i_category" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#1, 2000)", + "#0", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_category_id", + "i_category" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_category_id", + "i_category", + "sum(ss_ext_sales_price)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2000", + "d_moy=11" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manager_id=1", + "Projections": [ + "i_item_sk", + "i_category_id", + "i_category" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#1, 2000)", + "#0", + "__internal_compress_integral_utinyint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_category_id", + "i_category", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price) DESC", + "dt.d_year ASC", + "memory.main.item.i_category_id ASC", + "memory.main.item.i_category ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q43.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q43.slt.no new file mode 100644 index 00000000000..f51df314388 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q43.slt.no @@ -0,0 +1,541 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT s_store_name, + s_store_id, + sum(CASE + WHEN (d_day_name='Sunday') THEN ss_sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN ss_sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN ss_sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN ss_sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN ss_sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN ss_sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN ss_sales_price + ELSE NULL + END) sat_sales +FROM date_dim, + store_sales, + store +WHERE d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + AND s_gmt_offset = -5 + AND d_year = 2000 +GROUP BY s_store_name, + s_store_id +ORDER BY s_store_name, + s_store_id, + sun_sales, + mon_sales, + tue_sales, + wed_sales, + thu_sales, + fri_sales, + sat_sales +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(s_store_sk = ss_store_sk)", + "(CAST(s_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "s_store_name", + "s_store_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_day_name = CAST('Sunday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Monday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Tuesday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Wednesday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Thursday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Friday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Saturday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "s_store_id", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.store.s_store_name", + "memory.main.store.s_store_id", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Sunday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Monday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Tuesday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Wednesday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Thursday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Friday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Saturday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_day_name" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "s_store_name", + "s_store_id" + ], + "Expressions": [ + "sum(CASE WHEN ((d_day_name = 'Sunday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Monday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Tuesday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Wednesday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Thursday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Friday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Saturday')) THEN (ss_sales_price) ELSE NULL END)" + ], + "Estimated Cardinality": "57668" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "s_store_id", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ], + "Estimated Cardinality": "57668" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_day_name" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_gmt_offset=-5.00", + "Projections": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name", + "s_store_id", + "CASE WHEN ((d_day_name = 'Sunday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Monday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Tuesday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Wednesday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Thursday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Friday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Saturday')) THEN (ss_sales_price) ELSE NULL END" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)", + "sum(#4)", + "sum(#5)", + "sum(#6)", + "sum(#7)", + "sum(#8)" + ], + "Estimated Cardinality": "57668" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.store.s_store_name ASC", + "memory.main.store.s_store_id ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Sunday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Monday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Tuesday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Wednesday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Thursday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Friday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC", + "sum(CASE WHEN ((memory.main.date_dim.d_day_name = 'Saturday')) THEN (memory.main.store_sales.ss_sales_price) ELSE NULL END) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q44.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q44.slt.no new file mode 100644 index 00000000000..f390453071c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q44.slt.no @@ -0,0 +1,1379 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT asceding.rnk, + i1.i_product_name best_performing, + i2.i_product_name worst_performing +FROM + (SELECT * + FROM + (SELECT item_sk, + rank() OVER ( + ORDER BY rank_col ASC) rnk + FROM + (SELECT ss_item_sk item_sk, + avg(ss_net_profit) rank_col + FROM store_sales ss1 + WHERE ss_store_sk = 4 + GROUP BY ss_item_sk + HAVING avg(ss_net_profit) > 0.9* + (SELECT avg(ss_net_profit) rank_col + FROM store_sales + WHERE ss_store_sk = 4 + AND ss_addr_sk IS NULL + GROUP BY ss_store_sk))V1)V11 + WHERE rnk < 11) asceding, + (SELECT * + FROM + (SELECT item_sk, + rank() OVER ( + ORDER BY rank_col DESC) rnk + FROM + (SELECT ss_item_sk item_sk, + avg(ss_net_profit) rank_col + FROM store_sales ss1 + WHERE ss_store_sk = 4 + GROUP BY ss_item_sk + HAVING avg(ss_net_profit) > 0.9* + (SELECT avg(ss_net_profit) rank_col + FROM store_sales + WHERE ss_store_sk = 4 + AND ss_addr_sk IS NULL + GROUP BY ss_store_sk))V2)V21 + WHERE rnk < 11) descending, + item i1, + item i2 +WHERE asceding.rnk = descending.rnk + AND i1.i_item_sk=asceding.item_sk + AND i2.i_item_sk=descending.item_sk +ORDER BY asceding.rnk +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "(ss_store_sk = CAST(4 AS BIGINT))" + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": "avg(ss_net_profit)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk = CAST(4 AS BIGINT))", + "(ss_addr_sk IS NULL)" + ] + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(ss_net_profit)" + } + } + ], + "extra_info": { + "Expressions": "rank_col" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[20.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[26.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[26.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(avg(ss_net_profit) > (CAST(0.9 AS DOUBLE) * SUBQUERY))" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rank_col" + ] + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (ORDER BY rank_col ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ] + } + } + ], + "extra_info": { + "Expressions": "(rnk < CAST(11 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "(ss_store_sk = CAST(4 AS BIGINT))" + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": "avg(ss_net_profit)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk = CAST(4 AS BIGINT))", + "(ss_addr_sk IS NULL)" + ] + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(ss_net_profit)" + } + } + ], + "extra_info": { + "Expressions": "rank_col" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[61.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[67.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[67.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(avg(ss_net_profit) > (CAST(0.9 AS DOUBLE) * SUBQUERY))" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rank_col" + ] + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (ORDER BY rank_col DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ] + } + } + ], + "extra_info": { + "Expressions": "(rnk < CAST(11 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(rnk = rnk)", + "(i_item_sk = item_sk)", + "(i_item_sk = item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "rnk", + "best_performing", + "worst_performing" + ] + } + } + ], + "extra_info": { + "Order By": "asceding.rnk" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": "avg(ss_net_profit)", + "Estimated Cardinality": "10457" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(ss_net_profit)", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Expressions": "rank_col", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(avg(ss_net_profit) > (0.9 * SUBQUERY))", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rank_col" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (ORDER BY rank_col ASC NULLS LAST)", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": "(rnk < 11)", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ], + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ], + "Estimated Cardinality": "4" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": "avg(ss_net_profit)", + "Estimated Cardinality": "10457" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(ss_net_profit)", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Expressions": "rank_col", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(avg(ss_net_profit) > (0.9 * SUBQUERY))", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rank_col" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (ORDER BY rank_col DESC NULLS LAST)", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expressions": "(rnk < 11)", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ], + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "rnk" + ], + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(rnk = rnk)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(i_item_sk = item_sk)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(i_item_sk = item_sk)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "rnk", + "best_performing", + "worst_performing" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "ss_item_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "10457" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Projections": "rank_col", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "avg(ss_net_profit) > (0.9 * SUBQUERY)", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Projections": [ + "item_sk", + "rank_col" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY rank_col ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expression": "(rnk < 11)", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#2" + ], + "Estimated Cardinality": "4" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "ss_item_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "10457" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Projections": "rank_col", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "10457" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "avg(ss_net_profit) > (0.9 * SUBQUERY)", + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Projections": [ + "item_sk", + "rank_col" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY rank_col DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "21" + } + } + ], + "extra_info": { + "Expression": "(rnk < 11)", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#2" + ], + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "rnk = rnk", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "i_item_sk = item_sk", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "i_item_sk = item_sk", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "rnk", + "best_performing", + "worst_performing" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "asceding.rnk ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q45.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q45.slt.no new file mode 100644 index 00000000000..c56cf22337b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q45.slt.no @@ -0,0 +1,857 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT ca_zip, + ca_city, + sum(ws_sales_price) +FROM web_sales, + customer, + customer_address, + date_dim, + item +WHERE ws_bill_customer_sk = c_customer_sk + AND c_current_addr_sk = ca_address_sk + AND ws_item_sk = i_item_sk + AND (SUBSTRING(ca_zip,1,5) IN ('85669', + '86197', + '88274', + '83405', + '86475', + '85392', + '85460', + '80348', + '81792') + OR i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_item_sk IN (2, + 3, + 5, + 7, + 11, + 13, + 17, + 19, + 23, + 29) )) + AND ws_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 2001 +GROUP BY ca_zip, + ca_city +ORDER BY ca_zip, + ca_city +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_item_sk IN (CAST(2 AS BIGINT), CAST(3 AS BIGINT), CAST(5 AS BIGINT), CAST(7 AS BIGINT), CAST(11 AS BIGINT), CAST(13 AS BIGINT), CAST(17 AS BIGINT), CAST(19 AS BIGINT), CAST(23 AS BIGINT), CAST(29 AS BIGINT)))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[48.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_bill_customer_sk = c_customer_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(ws_item_sk = i_item_sk)", + "((\"substring\"(ca_zip, CAST(1 AS BIGINT), CAST(5 AS BIGINT)) IN (CAST('85669' AS VARCHAR), CAST('86197' AS VARCHAR), CAST('88274' AS VARCHAR), CAST('83405' AS VARCHAR), CAST('86475' AS VARCHAR), CAST('85392' AS VARCHAR), CAST('85460' AS VARCHAR), CAST('80348' AS VARCHAR), CAST('81792' AS VARCHAR))) OR SUBQUERY)", + "(ws_sold_date_sk = d_date_sk)", + "(d_qoy = CAST(2 AS BIGINT))", + "(d_year = CAST(2001 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ca_zip", + "ca_city" + ], + "Expressions": "sum(ws_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_zip", + "ca_city", + "sum(ws_sales_price)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer_address.ca_zip", + "memory.main.customer_address.ca_city" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_qoy = 2i64)", + "($.d_year = 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([2i64, 3i64, 5i64, 7i64, 11i64, 13i64, 17i64, 19i64, 23i64, 29i64], $.i_item_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "CHUNK_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(\"substring\"(ca_zip, 1, 5) = #0)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": "(IN (...) OR SUBQUERY)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "ca_zip", + "ca_city" + ], + "Expressions": "sum(ws_sales_price)", + "Estimated Cardinality": "2863" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_zip", + "ca_city", + "sum(ws_sales_price)" + ], + "Estimated Cardinality": "2863" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_qoy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([2i64, 3i64, 5i64, 7i64, 11i64, 13i64, 17i64, 19i64, 23i64, 29i64], $.i_item_sk)", + "Projections": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "14322" + } + }, + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "\"substring\"(ca_zip, 1, 5) = #0", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expression": "(IN (...) OR SUBQUERY)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "ca_zip", + "ca_city", + "ws_sales_price" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "2863" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer_address.ca_zip ASC", + "memory.main.customer_address.ca_city ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q46.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q46.slt.no new file mode 100644 index 00000000000..068f313a039 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q46.slt.no @@ -0,0 +1,1022 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_last_name, + c_first_name, + ca_city, + bought_city, + ss_ticket_number, + amt, + profit +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + ca_city bought_city, + sum(ss_coupon_amt) amt, + sum(ss_net_profit) profit + FROM store_sales, + date_dim, + store, + household_demographics, + customer_address + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND store_sales.ss_addr_sk = customer_address.ca_address_sk + AND (household_demographics.hd_dep_count = 4 + OR household_demographics.hd_vehicle_count= 3) + AND date_dim.d_dow IN (6, + 0) + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_city IN ('Fairview', + 'Midway') + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + ca_city) dn, + customer, + customer_address current_addr +WHERE ss_customer_sk = c_customer_sk + AND customer.c_current_addr_sk = current_addr.ca_address_sk + AND current_addr.ca_city <> bought_city +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + ca_city NULLS FIRST, + bought_city NULLS FIRST, + ss_ticket_number NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_addr_sk = ca_address_sk)", + "((hd_dep_count = CAST(4 AS BIGINT)) OR (hd_vehicle_count = CAST(3 AS INTEGER)))", + "(d_dow IN (CAST(6 AS BIGINT), CAST(0 AS BIGINT)))", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(s_city IN (CAST('Fairview' AS VARCHAR), CAST('Midway' AS VARCHAR)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city" + ], + "Expressions": [ + "sum(ss_coupon_amt)", + "sum(ss_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "amt", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_customer_sk = c_customer_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(ca_city != bought_city)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "amt", + "profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name", + "memory.main.customer.c_first_name", + "current_addr.ca_city", + "dn.bought_city", + "dn.ss_ticket_number" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([6i64, 0i64], $.d_dow)", + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Fairview\", \"Midway\"], $.s_city)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(($.hd_dep_count = 4i64) or ($.hd_vehicle_count = 3i32))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city" + ], + "Expressions": [ + "sum(ss_coupon_amt)", + "sum(ss_net_profit)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "amt", + "profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_customer_sk = c_customer_sk)", + "(bought_city != ca_city)" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "amt", + "profit" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([6i64, 0i64], $.d_dow)", + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Fairview\", \"Midway\"], $.s_city)", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(($.hd_dep_count = 4i64) or ($.hd_vehicle_count = 3i32))", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "amt", + "profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_customer_sk = c_customer_sk", + "bought_city != ca_city" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "amt", + "profit" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer.c_last_name ASC", + "memory.main.customer.c_first_name ASC", + "current_addr.ca_city ASC", + "dn.bought_city ASC", + "dn.ss_ticket_number ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q47.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q47.slt.no new file mode 100644 index 00000000000..d57d23fb301 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q47.slt.no @@ -0,0 +1,1255 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH v1 AS + (SELECT i_category, + i_brand, + s_store_name, + s_company_name, + d_year, + d_moy, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, + i_brand, + s_store_name, + s_company_name, + d_year) avg_monthly_sales, + rank() OVER (PARTITION BY i_category, + i_brand, + s_store_name, + s_company_name + ORDER BY d_year, + d_moy) rn + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND (d_year = 1999 + OR (d_year = 1999-1 + AND d_moy =12) + OR (d_year = 1999+1 + AND d_moy =1)) + GROUP BY i_category, + i_brand, + s_store_name, + s_company_name, + d_year, + d_moy), + v2 AS + (SELECT v1.i_category, + v1.i_brand, + v1.s_store_name, + v1.s_company_name, + v1.d_year, + v1.d_moy, + v1.avg_monthly_sales, + v1.sum_sales, + v1_lag.sum_sales psum, + v1_lead.sum_sales nsum + FROM v1, + v1 v1_lag, + v1 v1_lead + WHERE v1.i_category = v1_lag.i_category + AND v1.i_category = v1_lead.i_category + AND v1.i_brand = v1_lag.i_brand + AND v1.i_brand = v1_lead.i_brand + AND v1.s_store_name = v1_lag.s_store_name + AND v1.s_store_name = v1_lead.s_store_name + AND v1.s_company_name = v1_lag.s_company_name + AND v1.s_company_name = v1_lead.s_company_name + AND v1.rn = v1_lag.rn + 1 + AND v1.rn = v1_lead.rn - 1) +SELECT * +FROM v2 +WHERE d_year = 1999 + AND avg_monthly_sales > 0 + AND CASE + WHEN avg_monthly_sales > 0 THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "((d_year = CAST(1999 AS BIGINT)) OR ((d_year = CAST((1999 - 1) AS BIGINT)) AND (d_moy = CAST(12 AS BIGINT))) OR ((d_year = CAST((1999 + 1) AS BIGINT)) AND (d_moy = CAST(1 AS BIGINT))))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name, d_year)", + "RANK() OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "rn" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_category = i_category)", + "(i_category = i_category)", + "(i_brand = i_brand)", + "(i_brand = i_brand)", + "(s_store_name = s_store_name)", + "(s_store_name = s_store_name)", + "(s_company_name = s_company_name)", + "(s_company_name = s_company_name)", + "(rn = (rn + CAST(1 AS BIGINT)))", + "(rn = (rn - CAST(1 AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(1999 AS BIGINT))", + "(avg_monthly_sales > CAST(0 AS DOUBLE))", + "(CASE WHEN ((avg_monthly_sales > CAST(0 AS DOUBLE))) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE CAST(NULL AS DOUBLE) END > CAST(0.1 AS DOUBLE))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "#[46.10]", + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[46.0]", + "#[46.1]", + "#[46.2]", + "#[46.3]", + "#[46.4]", + "#[46.5]", + "#[46.6]", + "#[46.7]", + "#[46.8]", + "#[46.9]" + ] + } + } + ], + "extra_info": { + "CTE Name": "v2", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.d_year = 1999i64) or (($.d_year = 1998i64) and ($.d_moy = 12i64))) or (($.d_year = 2000i64) and ($.d_moy = 1i64)))", + "((($.d_year = 1999i64) or ($.d_year = 1998i64)) or ($.d_year = 2000i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name", + "s_company_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1900)", + "__internal_decompress_integral_bigint(#5, 1)", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name, d_year)", + "RANK() OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "rn" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_category = i_category)", + "(i_brand = i_brand)", + "(s_store_name = s_store_name)", + "(s_company_name = s_company_name)", + "((rn + 1) = (rn - 1))" + ], + "Estimated Cardinality": "46228599" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = 1999)", + "(avg_monthly_sales > 0.0)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_category = i_category)", + "(i_brand = i_brand)", + "(s_store_name = s_store_name)", + "(s_company_name = s_company_name)", + "((rn - 1) = rn)", + "((rn + 1) = rn)" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "((($.d_year = 1999i64) or (($.d_year = 1998i64) and ($.d_moy = 12i64))) or (($.d_year = 2000i64) and ($.d_moy = 1i64)))", + "((($.d_year = 1999i64) or ($.d_year = 1998i64)) or ($.d_year = 2000i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name", + "s_company_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Aggregates": "sum(#6)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1900)", + "__internal_decompress_integral_bigint(#5, 1)", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name, d_year)" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_category = i_category", + "i_brand = i_brand", + "s_store_name = s_store_name", + "s_company_name = s_company_name", + "(rn + 1) = (rn - 1)" + ], + "Estimated Cardinality": "46228599" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "((d_year = 1999) AND (avg_monthly_sales > 0.0))", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_category = i_category", + "i_brand = i_brand", + "s_store_name = s_store_name", + "s_company_name = s_company_name", + "(rn - 1) = rn", + "(rn + 1) = rn" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "s_store_name", + "s_company_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "7408492643" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "#10 ASC", + "i_category ASC", + "i_brand ASC", + "s_store_name ASC", + "s_company_name ASC", + "d_year ASC", + "d_moy ASC", + "avg_monthly_sales ASC", + "sum_sales ASC", + "psum ASC", + "nsum ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q48.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q48.slt.no new file mode 100644 index 00000000000..3d865a4b15f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q48.slt.no @@ -0,0 +1,647 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT SUM (ss_quantity) +FROM store_sales, + store, + customer_demographics, + customer_address, + date_dim +WHERE s_store_sk = ss_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2000 + AND ((cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'M' + AND cd_education_status = '4 yr Degree' + AND ss_sales_price BETWEEN 100.00 AND 150.00) + OR (cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'D' + AND cd_education_status = '2 yr Degree' + AND ss_sales_price BETWEEN 50.00 AND 100.00) + OR (cd_demo_sk = ss_cdemo_sk + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND ss_sales_price BETWEEN 150.00 AND 200.00)) + AND ((ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('CO', + 'OH', + 'TX') + AND ss_net_profit BETWEEN 0 AND 2000) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('OR', + 'MN', + 'KY') + AND ss_net_profit BETWEEN 150 AND 3000) + OR (ss_addr_sk = ca_address_sk + AND ca_country = 'United States' + AND ca_state IN ('VA', + 'CA', + 'MS') + AND ss_net_profit BETWEEN 50 AND 25000)) ; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(s_store_sk = ss_store_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2000 AS BIGINT))", + "(((cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('M' AS VARCHAR)) AND (cd_education_status = CAST('4 yr Degree' AS VARCHAR)) AND ((ss_sales_price >= CAST(100.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(150.00 AS DECIMAL(7,2))))) OR ((cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('D' AS VARCHAR)) AND (cd_education_status = CAST('2 yr Degree' AS VARCHAR)) AND ((ss_sales_price >= CAST(50.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(100.00 AS DECIMAL(7,2))))) OR ((cd_demo_sk = ss_cdemo_sk) AND (cd_marital_status = CAST('S' AS VARCHAR)) AND (cd_education_status = CAST('College' AS VARCHAR)) AND ((ss_sales_price >= CAST(150.00 AS DECIMAL(7,2))) AND (ss_sales_price <= CAST(200.00 AS DECIMAL(7,2))))))", + "(((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('CO' AS VARCHAR), CAST('OH' AS VARCHAR), CAST('TX' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(0 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(2000 AS DECIMAL(12,2))))) OR ((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('OR' AS VARCHAR), CAST('MN' AS VARCHAR), CAST('KY' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(150 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(3000 AS DECIMAL(12,2))))) OR ((ss_addr_sk = ca_address_sk) AND (ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('VA' AS VARCHAR), CAST('CA' AS VARCHAR), CAST('MS' AS VARCHAR))) AND ((CAST(ss_net_profit AS DECIMAL(12,2)) >= CAST(50 AS DECIMAL(12,2))) AND (CAST(ss_net_profit AS DECIMAL(12,2)) <= CAST(25000 AS DECIMAL(12,2))))))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_quantity)" + } + } + ], + "extra_info": { + "Expressions": "sum(ss_quantity)" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_cdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_country = \"United States\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": "((((ss_net_profit >= 0.00) AND (ss_net_profit <= 2000.00)) AND ((ca_state = 'CO') OR (ca_state = 'OH') OR (ca_state = 'TX'))) OR (((ss_net_profit >= 150.00) AND (ss_net_profit <= 3000.00)) AND ((ca_state = 'OR') OR (ca_state = 'MN') OR (ca_state = 'KY'))) OR (((ss_net_profit >= 50.00) AND (ss_net_profit <= 25000.00)) AND ((ca_state = 'VA') OR (ca_state = 'CA') OR (ca_state = 'MS'))))", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = ss_cdemo_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": "((((ss_sales_price >= 100.00) AND (ss_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = '4 yr Degree')) OR (((ss_sales_price >= 50.00) AND (ss_sales_price <= 100.00)) AND (cd_marital_status = 'D') AND (cd_education_status = '2 yr Degree')) OR (((ss_sales_price >= 150.00) AND (ss_sales_price <= 200.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_quantity)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "sum(ss_quantity)", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_cdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_country='United States'", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expression": "((((ss_net_profit >= 0.00) AND (ss_net_profit <= 2000.00)) AND ((ca_state = 'CO') OR (ca_state = 'OH') OR (ca_state = 'TX'))) OR (((ss_net_profit >= 150.00) AND (ss_net_profit <= 3000.00)) AND ((ca_state = 'OR') OR (ca_state = 'MN') OR (ca_state = 'KY'))) OR (((ss_net_profit >= 50.00) AND (ss_net_profit <= 25000.00)) AND ((ca_state = 'VA') OR (ca_state = 'CA') OR (ca_state = 'MS'))))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = ss_cdemo_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expression": "((((ss_sales_price >= 100.00) AND (ss_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = '4 yr Degree')) OR (((ss_sales_price >= 50.00) AND (ss_sales_price <= 100.00)) AND (cd_marital_status = 'D') AND (cd_education_status = '2 yr Degree')) OR (((ss_sales_price >= 150.00) AND (ss_sales_price <= 200.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')))", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": "#2", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": "ss_quantity", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Aggregates": "sum(#0)" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q49.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q49.slt.no new file mode 100644 index 00000000000..3a29aa994f2 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q49.slt.no @@ -0,0 +1,2323 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT channel, + item, + return_ratio, + return_rank, + currency_rank +FROM + (SELECT 'web' AS channel, + web.item, + web.return_ratio, + web.return_rank, + web.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT ws.ws_item_sk AS item, + (cast(sum(coalesce(wr.wr_return_quantity,0)) AS decimal(15,4))/ cast(sum(coalesce(ws.ws_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(wr.wr_return_amt,0)) AS decimal(15,4))/ cast(sum(coalesce(ws.ws_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM web_sales ws + LEFT OUTER JOIN web_returns wr ON (ws.ws_order_number = wr.wr_order_number + AND ws.ws_item_sk = wr.wr_item_sk) ,date_dim + WHERE wr.wr_return_amt > 10000 + AND ws.ws_net_profit > 1 + AND ws.ws_net_paid > 0 + AND ws.ws_quantity > 0 + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY ws.ws_item_sk) in_web) web + WHERE (web.return_rank <= 10 + OR web.currency_rank <= 10) + UNION SELECT 'catalog' AS channel, + catalog.item, + catalog.return_ratio, + catalog.return_rank, + catalog.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT cs.cs_item_sk AS item, + (cast(sum(coalesce(cr.cr_return_quantity,0)) AS decimal(15,4))/ cast(sum(coalesce(cs.cs_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(cr.cr_return_amount,0)) AS decimal(15,4))/ cast(sum(coalesce(cs.cs_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM catalog_sales cs + LEFT OUTER JOIN catalog_returns cr ON (cs.cs_order_number = cr.cr_order_number + AND cs.cs_item_sk = cr.cr_item_sk) ,date_dim + WHERE cr.cr_return_amount > 10000 + AND cs.cs_net_profit > 1 + AND cs.cs_net_paid > 0 + AND cs.cs_quantity > 0 + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY cs.cs_item_sk) in_cat) CATALOG + WHERE (catalog.return_rank <= 10 + OR catalog.currency_rank <=10) + UNION SELECT 'store' AS channel, + store.item, + store.return_ratio, + store.return_rank, + store.currency_rank + FROM + (SELECT item, + return_ratio, + currency_ratio, + rank() OVER ( + ORDER BY return_ratio) AS return_rank, + rank() OVER ( + ORDER BY currency_ratio) AS currency_rank + FROM + (SELECT sts.ss_item_sk AS item, + (cast(sum(coalesce(sr.sr_return_quantity,0)) AS decimal(15,4))/cast(sum(coalesce(sts.ss_quantity,0)) AS decimal(15,4))) AS return_ratio, + (cast(sum(coalesce(sr.sr_return_amt,0)) AS decimal(15,4))/cast(sum(coalesce(sts.ss_net_paid,0)) AS decimal(15,4))) AS currency_ratio + FROM store_sales sts + LEFT OUTER JOIN store_returns sr ON (sts.ss_ticket_number = sr.sr_ticket_number + AND sts.ss_item_sk = sr.sr_item_sk) ,date_dim + WHERE sr.sr_return_amt > 10000 + AND sts.ss_net_profit > 1 + AND sts.ss_net_paid > 0 + AND sts.ss_quantity > 0 + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 12 + GROUP BY sts.ss_item_sk) in_store) store + WHERE (store.return_rank <= 10 + OR store.currency_rank <= 10) ) sq1 +ORDER BY 1 NULLS FIRST, + 4 NULLS FIRST, + 5 NULLS FIRST, + 2 NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(wr_return_amt AS DECIMAL(12,2)) > CAST(10000 AS DECIMAL(12,2)))", + "(CAST(ws_net_profit AS DECIMAL(12,2)) > CAST(1 AS DECIMAL(12,2)))", + "(CAST(ws_net_paid AS DECIMAL(12,2)) > CAST(0 AS DECIMAL(12,2)))", + "(ws_quantity > CAST(0 AS BIGINT))", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(12 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "ws_item_sk", + "Expressions": [ + "sum(COALESCE(wr_return_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(ws_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum(COALESCE(CAST(ws_net_paid AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= CAST(10 AS BIGINT)) OR (currency_rank <= CAST(10 AS BIGINT)))" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(cr_return_amount AS DECIMAL(12,2)) > CAST(10000 AS DECIMAL(12,2)))", + "(CAST(cs_net_profit AS DECIMAL(12,2)) > CAST(1 AS DECIMAL(12,2)))", + "(CAST(cs_net_paid AS DECIMAL(12,2)) > CAST(0 AS DECIMAL(12,2)))", + "(cs_quantity > CAST(0 AS BIGINT))", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(12 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "cs_item_sk", + "Expressions": [ + "sum(COALESCE(cr_return_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(cs_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum(COALESCE(CAST(cs_net_paid AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= CAST(10 AS BIGINT)) OR (currency_rank <= CAST(10 AS BIGINT)))" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(sr_return_amt AS DECIMAL(12,2)) > CAST(10000 AS DECIMAL(12,2)))", + "(CAST(ss_net_profit AS DECIMAL(12,2)) > CAST(1 AS DECIMAL(12,2)))", + "(CAST(ss_net_paid AS DECIMAL(12,2)) > CAST(0 AS DECIMAL(12,2)))", + "(ss_quantity > CAST(0 AS BIGINT))", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(12 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": [ + "sum(COALESCE(sr_return_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(ss_quantity, CAST(0 AS BIGINT)))", + "sum(COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum(COALESCE(CAST(ss_net_paid AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= CAST(10 AS BIGINT)) OR (currency_rank <= CAST(10 AS BIGINT)))" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Order By": [ + "channel", + "return_rank", + "currency_rank", + "item" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.ws_net_profit > decimal128(100, precision=7, scale=2))", + "($.ws_net_paid > decimal128(0, precision=7, scale=2))", + "($.ws_quantity > 0i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_order_number", + "ws_quantity", + "ws_net_paid" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 12i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "2921" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.wr_return_amt > decimal128(1000000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1407" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_item_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt" + ], + "Estimated Cardinality": "1407" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "ws_item_sk", + "Expressions": [ + "sum(COALESCE(wr_return_quantity, 0))", + "sum(COALESCE(ws_quantity, 0))", + "sum(COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), 0.00))", + "sum(COALESCE(CAST(ws_net_paid AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "528" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "528" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "528" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cs_net_profit > decimal128(100, precision=7, scale=2))", + "($.cs_net_paid > decimal128(0, precision=7, scale=2))", + "($.cs_quantity > 0i64)", + "(2i64 <= $.cs_order_number <= 15999i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_net_paid" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 12i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.cr_return_amount > decimal128(1000000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "2855" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount" + ], + "Estimated Cardinality": "2855" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "cs_item_sk", + "Expressions": [ + "sum(COALESCE(cr_return_quantity, 0))", + "sum(COALESCE(cs_quantity, 0))", + "sum(COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), 0.00))", + "sum(COALESCE(CAST(cs_net_paid AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "1041" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "1041" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "1041" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.ss_net_profit > decimal128(100, precision=7, scale=2))", + "($.ss_net_paid > decimal128(0, precision=7, scale=2))", + "($.ss_quantity > 0i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ticket_number", + "ss_quantity", + "ss_net_paid" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 12i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.sr_return_amt > decimal128(1000000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "5715" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt" + ], + "Estimated Cardinality": "5715" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "ss_item_sk", + "Expressions": [ + "sum(COALESCE(sr_return_quantity, 0))", + "sum(COALESCE(ss_quantity, 0))", + "sum(COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), 0.00))", + "sum(COALESCE(CAST(ss_net_paid AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Expressions": [ + "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)", + "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Expressions": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": [ + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_string_ubigint(#0)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2091", + "Distinct Targets": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_string(#0)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "($.ws_net_profit > decimal128(100, precision=7, scale=2))", + "($.ws_net_paid > decimal128(0, precision=7, scale=2))", + "($.ws_quantity > 0i64)" + ], + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_order_number", + "ws_quantity", + "ws_net_paid" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=12" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "2921" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.wr_return_amt > decimal128(1000000, precision=7, scale=2))", + "Projections": [ + "wr_item_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt" + ], + "Estimated Cardinality": "1407" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ws_order_number = wr_order_number", + "ws_item_sk = wr_item_sk" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "ws_item_sk", + "COALESCE(wr_return_quantity, 0)", + "COALESCE(ws_quantity, 0)", + "COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), 0.00)", + "COALESCE(CAST(ws_net_paid AS DECIMAL(12,2)), 0.00)" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Projections": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2642" + } + } + ], + "extra_info": { + "Expression": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "528" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#3", + "#4" + ], + "Estimated Cardinality": "528" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "528" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "($.cs_net_profit > decimal128(100, precision=7, scale=2))", + "($.cs_net_paid > decimal128(0, precision=7, scale=2))", + "($.cs_quantity > 0i64)", + "(2i64 <= $.cs_order_number <= 15999i64)" + ], + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_net_paid" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=12" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.cr_return_amount > decimal128(1000000, precision=7, scale=2))", + "Projections": [ + "cr_item_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount" + ], + "Estimated Cardinality": "2855" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_order_number = cr_order_number", + "cs_item_sk = cr_item_sk" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "cs_item_sk", + "COALESCE(cr_return_quantity, 0)", + "COALESCE(cs_quantity, 0)", + "COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), 0.00)", + "COALESCE(CAST(cs_net_paid AS DECIMAL(12,2)), 0.00)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Projections": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "5206" + } + } + ], + "extra_info": { + "Expression": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "1041" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#3", + "#4" + ], + "Estimated Cardinality": "1041" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "1041" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "($.ss_net_profit > decimal128(100, precision=7, scale=2))", + "($.ss_net_paid > decimal128(0, precision=7, scale=2))", + "($.ss_quantity > 0i64)" + ], + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ticket_number", + "ss_quantity", + "ss_net_paid" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=12" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.sr_return_amt > decimal128(1000000, precision=7, scale=2))", + "Projections": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt" + ], + "Estimated Cardinality": "5715" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_ticket_number = sr_ticket_number", + "ss_item_sk = sr_item_sk" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "ss_item_sk", + "COALESCE(sr_return_quantity, 0)", + "COALESCE(ss_quantity, 0)", + "COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), 0.00)", + "COALESCE(CAST(ss_net_paid AS DECIMAL(12,2)), 0.00)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Projections": [ + "item", + "return_ratio", + "currency_ratio" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY return_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (ORDER BY currency_ratio ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "10455" + } + } + ], + "extra_info": { + "Expression": "((return_rank <= 10) OR (currency_rank <= 10))", + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#3", + "#4" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "", + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_string_ubigint(#0)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "item", + "return_ratio", + "return_rank", + "currency_rank" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "", + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_string(#0)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "2091" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "channel ASC", + "return_rank ASC", + "currency_rank ASC", + "item ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q5.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q5.slt.no new file mode 100644 index 00000000000..ca9661e6e93 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q5.slt.no @@ -0,0 +1,2392 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ssr AS + (SELECT s_store_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT ss_store_sk AS store_sk, + ss_sold_date_sk AS date_sk, + ss_ext_sales_price AS sales_price, + ss_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM store_sales + UNION ALL SELECT sr_store_sk AS store_sk, + sr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + sr_return_amt AS return_amt, + sr_net_loss AS net_loss + FROM store_returns ) salesreturns, + date_dim, + store + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND store_sk = s_store_sk + GROUP BY s_store_id) , + csr AS + (SELECT cp_catalog_page_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT cs_catalog_page_sk AS page_sk, + cs_sold_date_sk AS date_sk, + cs_ext_sales_price AS sales_price, + cs_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM catalog_sales + UNION ALL SELECT cr_catalog_page_sk AS page_sk, + cr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + cr_return_amount AS return_amt, + cr_net_loss AS net_loss + FROM catalog_returns ) salesreturns, + date_dim, + catalog_page + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND page_sk = cp_catalog_page_sk + GROUP BY cp_catalog_page_id) , + wsr AS + (SELECT web_site_id, + sum(sales_price) AS sales, + sum(profit) AS profit, + sum(return_amt) AS returns_, + sum(net_loss) AS profit_loss + FROM + (SELECT ws_web_site_sk AS wsr_web_site_sk, + ws_sold_date_sk AS date_sk, + ws_ext_sales_price AS sales_price, + ws_net_profit AS profit, + cast(0 AS decimal(7,2)) AS return_amt, + cast(0 AS decimal(7,2)) AS net_loss + FROM web_sales + UNION ALL SELECT ws_web_site_sk AS wsr_web_site_sk, + wr_returned_date_sk AS date_sk, + cast(0 AS decimal(7,2)) AS sales_price, + cast(0 AS decimal(7,2)) AS profit, + wr_return_amt AS return_amt, + wr_net_loss AS net_loss + FROM web_returns + LEFT OUTER JOIN web_sales ON (wr_item_sk = ws_item_sk + AND wr_order_number = ws_order_number) ) salesreturns, + date_dim, + web_site + WHERE date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-06' AS date) + AND wsr_web_site_sk = web_site_sk + GROUP BY web_site_id) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + concat('store', s_store_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM ssr + UNION ALL SELECT 'catalog channel' AS channel , + concat('catalog_page', cp_catalog_page_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM csr + UNION ALL SELECT 'web channel' AS channel , + concat('web_site', web_site_id) AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM wsr ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(store_sk = s_store_sk)", + "(d_date <= CAST('2000-09-06' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "s_store_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_id", + "sales", + "profit", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_sk", + "cp_catalog_page_id", + "cp_start_date_sk", + "cp_end_date_sk", + "cp_department", + "cp_catalog_number", + "cp_catalog_page_number", + "cp_description", + "cp_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(page_sk = cp_catalog_page_sk)", + "(d_date <= CAST('2000-09-06' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "cp_catalog_page_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_id", + "sales", + "profit", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(wr_item_sk = ws_item_sk)", + "(wr_order_number = ws_order_number)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id", + "web_rec_start_date", + "web_rec_end_date", + "web_name", + "web_open_date_sk", + "web_close_date_sk", + "web_class", + "web_manager", + "web_mkt_id", + "web_mkt_class", + "web_mkt_desc", + "web_market_manager", + "web_company_id", + "web_company_name", + "web_street_number", + "web_street_name", + "web_street_type", + "web_suite_number", + "web_city", + "web_county", + "web_state", + "web_zip", + "web_country", + "web_gmt_offset", + "web_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(wsr_web_site_sk = web_site_sk)", + "(d_date <= CAST('2000-09-06' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "web_site_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_id", + "sales", + "profit", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "x.channel", + "x.id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "wsr", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "csr", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ssr", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_store_sk", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "317040" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450816i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(date_sk = d_date_sk)", + "Estimated Cardinality": "317040" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(store_sk = s_store_sk)", + "Estimated Cardinality": "317040" + } + } + ], + "extra_info": { + "Groups": "s_store_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ], + "Estimated Cardinality": "192352" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_id", + "sales", + "profit", + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "192352" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "192352" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "192352" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_catalog_page_sk", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_catalog_page_sk", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "157932" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450815i64 <= $.d_date_sk <= 2452907i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(date_sk = d_date_sk)", + "Estimated Cardinality": "157932" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.cp_catalog_page_sk <= 9827i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_sk", + "cp_catalog_page_id" + ], + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(page_sk = cp_catalog_page_sk)", + "Estimated Cardinality": "157932" + } + } + ], + "extra_info": { + "Groups": "cp_catalog_page_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ], + "Estimated Cardinality": "95807" + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_id", + "sales", + "profit", + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "95807" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "95807" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "95807" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_web_site_sk", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_item_sk", + "ws_web_site_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_item_sk", + "wr_order_number", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "RIGHT", + "Conditions": [ + "(ws_item_sk = wr_item_sk)", + "(ws_order_number = wr_order_number)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143264" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450816i64 <= $.d_date_sk <= 2452974i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(date_sk = d_date_sk)", + "Estimated Cardinality": "143264" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wsr_web_site_sk = web_site_sk)", + "Estimated Cardinality": "143264" + } + } + ], + "extra_info": { + "Groups": "web_site_id", + "Expressions": [ + "sum(sales_price)", + "sum(profit)", + "sum(return_amt)", + "sum(net_loss)" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_id", + "sales", + "profit", + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "350096" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ], + "Estimated Cardinality": "197658" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "197658" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_store_sk", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Projections": [ + "store_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450816i64 <= $.d_date_sk <= 2452820i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "date_sk = d_date_sk", + "Estimated Cardinality": "317040" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "store_sk = s_store_sk", + "Estimated Cardinality": "317040" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_id", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "317040" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "192352" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "192352" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_catalog_page_sk", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_returned_date_sk", + "cr_catalog_page_sk", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Projections": [ + "page_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450815i64 <= $.d_date_sk <= 2452907i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "date_sk = d_date_sk", + "Estimated Cardinality": "157932" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.cp_catalog_page_sk <= 9827i64)", + "Projections": [ + "cp_catalog_page_sk", + "cp_catalog_page_id" + ], + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "page_sk = cp_catalog_page_sk", + "Estimated Cardinality": "157932" + } + } + ], + "extra_info": { + "Projections": [ + "cp_catalog_page_id", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "157932" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "95807" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "95807" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_web_site_sk", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_item_sk", + "ws_web_site_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_returned_date_sk", + "wr_item_sk", + "wr_order_number", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "RIGHT", + "Conditions": [ + "ws_item_sk = wr_item_sk", + "ws_order_number = wr_order_number" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "wsr_web_site_sk", + "date_sk", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-06)", + "(2450816i64 <= $.d_date_sk <= 2452974i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "date_sk = d_date_sk", + "Estimated Cardinality": "143264" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "web_site_sk", + "web_site_id" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wsr_web_site_sk = web_site_sk", + "Estimated Cardinality": "143264" + } + } + ], + "extra_info": { + "Projections": [ + "web_site_id", + "sales_price", + "profit", + "return_amt", + "net_loss" + ], + "Estimated Cardinality": "143264" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "61937" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "350096" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "197658" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "x.channel ASC", + "x.id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q50.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q50.slt.no new file mode 100644 index 00000000000..6987a0faa55 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q50.slt.no @@ -0,0 +1,963 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip, + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 30) + AND (sr_returned_date_sk - ss_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 60) + AND (sr_returned_date_sk - ss_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 90) + AND (sr_returned_date_sk - ss_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (sr_returned_date_sk - ss_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM store_sales, + store_returns, + store, + date_dim d1, + date_dim d2 +WHERE d2.d_year = 2001 + AND d2.d_moy = 8 + AND ss_ticket_number = sr_ticket_number + AND ss_item_sk = sr_item_sk + AND ss_sold_date_sk = d1.d_date_sk + AND sr_returned_date_sk = d2.d_date_sk + AND ss_customer_sk = sr_customer_sk + AND ss_store_sk = s_store_sk +GROUP BY s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip +ORDER BY s_store_name, + s_company_id, + s_street_number, + s_street_name, + s_street_type, + s_suite_number, + s_city, + s_county, + s_state, + s_zip +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(8 AS BIGINT))", + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(sr_returned_date_sk = d_date_sk)", + "(ss_customer_sk = sr_customer_sk)", + "(ss_store_sk = s_store_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip" + ], + "Expressions": [ + "sum(CASE WHEN (((sr_returned_date_sk - ss_sold_date_sk) <= CAST(30 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((sr_returned_date_sk - ss_sold_date_sk) > CAST(30 AS BIGINT)) AND ((sr_returned_date_sk - ss_sold_date_sk) <= CAST(60 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((sr_returned_date_sk - ss_sold_date_sk) > CAST(60 AS BIGINT)) AND ((sr_returned_date_sk - ss_sold_date_sk) <= CAST(90 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((sr_returned_date_sk - ss_sold_date_sk) > CAST(90 AS BIGINT)) AND ((sr_returned_date_sk - ss_sold_date_sk) <= CAST(120 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN (((sr_returned_date_sk - ss_sold_date_sk) > CAST(120 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.store.s_store_name", + "memory.main.store.s_company_id", + "memory.main.store.s_street_number", + "memory.main.store.s_street_name", + "memory.main.store.s_street_type", + "memory.main.store.s_suite_number", + "memory.main.store.s_city", + "memory.main.store.s_county", + "memory.main.store.s_state", + "memory.main.store.s_zip" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 8i64)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)", + "(ss_customer_sk = sr_customer_sk)" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "(sr_returned_date_sk - ss_sold_date_sk)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip" + ], + "Expressions": [ + "sum(CASE WHEN ((#10 <= 30)) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#10 > 30) AND (#10 <= 60))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#10 > 60) AND (#10 <= 90))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#10 > 90) AND (#10 <= 120))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN ((#10 > 120)) THEN (1) ELSE 0 END)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=8" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "5713" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_ticket_number = sr_ticket_number", + "ss_item_sk = sr_item_sk", + "ss_customer_sk = sr_customer_sk" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": "d_date_sk", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "(sr_returned_date_sk - ss_sold_date_sk)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name", + "s_company_id", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "CASE WHEN ((#10 <= 30)) THEN (1) ELSE 0 END", + "CASE WHEN (((#10 > 30) AND (#10 <= 60))) THEN (1) ELSE 0 END", + "CASE WHEN (((#10 > 60) AND (#10 <= 90))) THEN (1) ELSE 0 END", + "CASE WHEN (((#10 > 90) AND (#10 <= 120))) THEN (1) ELSE 0 END", + "CASE WHEN ((#10 > 120)) THEN (1) ELSE 0 END" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Aggregates": [ + "sum(#10)", + "sum(#11)", + "sum(#12)", + "sum(#13)", + "sum(#14)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.store.s_store_name ASC", + "memory.main.store.s_company_id ASC", + "memory.main.store.s_street_number ASC", + "memory.main.store.s_street_name ASC", + "memory.main.store.s_street_type ASC", + "memory.main.store.s_suite_number ASC", + "memory.main.store.s_city ASC", + "memory.main.store.s_county ASC", + "memory.main.store.s_state ASC", + "memory.main.store.s_zip ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q51.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q51.slt.no new file mode 100644 index 00000000000..5dd6ba5aa99 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q51.slt.no @@ -0,0 +1,1154 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH web_v1 AS + (SELECT ws_item_sk item_sk, + d_date, + sum(sum(ws_sales_price)) OVER (PARTITION BY ws_item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) cume_sales + FROM web_sales, + date_dim + WHERE ws_sold_date_sk=d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + AND ws_item_sk IS NOT NULL + GROUP BY ws_item_sk, + d_date), + store_v1 AS + (SELECT ss_item_sk item_sk, + d_date, + sum(sum(ss_sales_price)) OVER (PARTITION BY ss_item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) cume_sales + FROM store_sales, + date_dim + WHERE ss_sold_date_sk=d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + AND ss_item_sk IS NOT NULL + GROUP BY ss_item_sk, + d_date) +SELECT * +FROM + (SELECT item_sk, + d_date, + web_sales, + store_sales, + max(web_sales) OVER (PARTITION BY item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) web_cumulative, + max(store_sales) OVER (PARTITION BY item_sk + ORDER BY d_date ROWS BETWEEN unbounded preceding AND CURRENT ROW) store_cumulative + FROM + (SELECT CASE + WHEN web.item_sk IS NOT NULL THEN web.item_sk + ELSE store.item_sk + END item_sk, + CASE + WHEN web.d_date IS NOT NULL THEN web.d_date + ELSE store.d_date + END d_date, + web.cume_sales web_sales, + store.cume_sales store_sales + FROM web_v1 web + FULL OUTER JOIN store_v1 store ON (web.item_sk = store.item_sk + AND web.d_date = store.d_date))x)y +WHERE web_cumulative > store_cumulative +ORDER BY item_sk NULLS FIRST, + d_date NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(ws_item_sk IS NOT NULL)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ws_item_sk", + "d_date" + ], + "Expressions": "sum(ws_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ws_sales_price)) OVER (PARTITION BY ws_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "cume_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(ss_item_sk IS NOT NULL)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_item_sk", + "d_date" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ss_sales_price)) OVER (PARTITION BY ss_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "cume_sales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "(item_sk = item_sk)", + "(d_date = d_date)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "max(web_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)", + "max(store_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales", + "web_cumulative", + "store_cumulative" + ] + } + } + ], + "extra_info": { + "Expressions": "(web_cumulative > store_cumulative)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales", + "web_cumulative", + "store_cumulative" + ] + } + } + ], + "extra_info": { + "Order By": [ + "y.item_sk", + "y.d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "store_v1", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "web_v1", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "is_not_null($.ss_item_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "ss_item_sk", + "d_date" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ss_sales_price)) OVER (PARTITION BY ss_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)", + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "cume_sales" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "57691" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "is_not_null($.ws_item_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_sales_price" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": [ + "ws_item_sk", + "d_date" + ], + "Expressions": "sum(ws_sales_price)", + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ws_sales_price)) OVER (PARTITION BY ws_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)", + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "cume_sales" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "(item_sk = item_sk)", + "(d_date = d_date)" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": [ + "max(web_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)", + "max(store_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expressions": "(web_cumulative > store_cumulative)", + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales", + "web_cumulative", + "store_cumulative" + ], + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Expressions": [ + "item_sk", + "d_date", + "web_sales", + "store_sales", + "web_cumulative", + "store_cumulative" + ], + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "is_not_null($.ss_item_sk)", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "ss_item_sk", + "d_date", + "ss_sales_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Projections": "sum(sum(ss_sales_price)) OVER (PARTITION BY ss_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Projections": [ + "item_sk", + "d_date", + "cume_sales" + ], + "Estimated Cardinality": "57691" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "is_not_null($.ws_item_sk)", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_sales_price" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "ws_item_sk", + "d_date", + "ws_sales_price" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Projections": "sum(sum(ws_sales_price)) OVER (PARTITION BY ws_item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Projections": [ + "item_sk", + "d_date", + "cume_sales" + ], + "Estimated Cardinality": "14608" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "item_sk = item_sk", + "d_date = d_date" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Projections": [ + "item_sk", + "d_date", + "web_sales", + "store_sales" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Projections": [ + "max(web_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)", + "max(store_sales) OVER (PARTITION BY item_sk ORDER BY d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "57691" + } + } + ], + "extra_info": { + "Expression": "(web_cumulative > store_cumulative)", + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "y.item_sk ASC", + "y.d_date ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q52.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q52.slt.no new file mode 100644 index 00000000000..347dd9f3347 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q52.slt.no @@ -0,0 +1,531 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT dt.d_year, + item.i_brand_id brand_id, + item.i_brand brand, + sum(ss_ext_sales_price) ext_price +FROM date_dim dt, + store_sales, + item +WHERE dt.d_date_sk = store_sales.ss_sold_date_sk + AND store_sales.ss_item_sk = item.i_item_sk + AND item.i_manager_id = 1 + AND dt.d_moy=11 + AND dt.d_year=2000 +GROUP BY dt.d_year, + item.i_brand, + item.i_brand_id +ORDER BY dt.d_year, + ext_price DESC, + brand_id +LIMIT 100 ; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(ss_item_sk = i_item_sk)", + "(i_manager_id = CAST(1 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "brand_id", + "brand", + "ext_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "dt.d_year", + "sum(memory.main.store_sales.ss_ext_sales_price)", + "memory.main.item.i_brand_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manager_id = 1i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#1, 2000)", + "#0", + "__internal_compress_integral_uinteger(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "#1", + "__internal_decompress_integral_bigint(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "brand_id", + "brand", + "ext_price" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2000", + "d_moy=11" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manager_id=1", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#1, 2000)", + "#0", + "__internal_compress_integral_uinteger(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand", + "i_brand_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "sum(#3)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "#1", + "__internal_decompress_integral_bigint(#2, 1001001)", + "#3" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "brand_id", + "brand", + "ext_price" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "dt.d_year ASC", + "sum(memory.main.store_sales.ss_ext_sales_price) DESC", + "memory.main.item.i_brand_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q53.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q53.slt.no new file mode 100644 index 00000000000..4d41dbc710b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q53.slt.no @@ -0,0 +1,748 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT i_manufact_id, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_manufact_id) avg_quarterly_sales + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_month_seq IN (1200, + 1200+1, + 1200+2, + 1200+3, + 1200+4, + 1200+5, + 1200+6, + 1200+7, + 1200+8, + 1200+9, + 1200+10, + 1200+11) + AND ((i_category IN ('Books', + 'Children', + 'Electronics') + AND i_class IN ('personal', + 'portable', + 'reference', + 'self-help') + AND i_brand IN ('scholaramalgamalg #14', + 'scholaramalgamalg #7', + 'exportiunivamalg #9', + 'scholaramalgamalg #9')) or(i_category IN ('Women','Music','Men') + AND i_class IN ('accessories','classical','fragrances','pants') + AND i_brand IN ('amalgimporto #1','edu packscholar #1','exportiimporto #1', 'importoamalg #1'))) + GROUP BY i_manufact_id, + d_qoy) tmp1 +WHERE CASE + WHEN avg_quarterly_sales > 0 THEN ABS (sum_sales - avg_quarterly_sales)/ avg_quarterly_sales + ELSE NULL + END > 0.1 +ORDER BY avg_quarterly_sales, + sum_sales, + i_manufact_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(d_month_seq IN (CAST(1200 AS BIGINT), CAST((1200 + 1) AS BIGINT), CAST((1200 + 2) AS BIGINT), CAST((1200 + 3) AS BIGINT), CAST((1200 + 4) AS BIGINT), CAST((1200 + 5) AS BIGINT), CAST((1200 + 6) AS BIGINT), CAST((1200 + 7) AS BIGINT), CAST((1200 + 8) AS BIGINT), CAST((1200 + 9) AS BIGINT), CAST((1200 + 10) AS BIGINT), CAST((1200 + 11) AS BIGINT)))", + "(((i_category IN (CAST('Books' AS VARCHAR), CAST('Children' AS VARCHAR), CAST('Electronics' AS VARCHAR))) AND (i_class IN (CAST('personal' AS VARCHAR), CAST('portable' AS VARCHAR), CAST('reference' AS VARCHAR), CAST('self-help' AS VARCHAR))) AND (i_brand IN (CAST('scholaramalgamalg #14' AS VARCHAR), CAST('scholaramalgamalg #7' AS VARCHAR), CAST('exportiunivamalg #9' AS VARCHAR), CAST('scholaramalgamalg #9' AS VARCHAR)))) OR ((i_category IN (CAST('Women' AS VARCHAR), CAST('Music' AS VARCHAR), CAST('Men' AS VARCHAR))) AND (i_class IN (CAST('accessories' AS VARCHAR), CAST('classical' AS VARCHAR), CAST('fragrances' AS VARCHAR), CAST('pants' AS VARCHAR))) AND (i_brand IN (CAST('amalgimporto #1' AS VARCHAR), CAST('edu packscholar #1' AS VARCHAR), CAST('exportiimporto #1' AS VARCHAR), CAST('importoamalg #1' AS VARCHAR)))))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_manufact_id", + "d_qoy" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manufact_id)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "sum_sales", + "avg_quarterly_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_quarterly_sales > CAST(0 AS DOUBLE))) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_quarterly_sales)) / avg_quarterly_sales)) ELSE CAST(NULL AS DOUBLE) END > CAST(0.1 AS DOUBLE))" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "sum_sales", + "avg_quarterly_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "tmp1.avg_quarterly_sales", + "tmp1.sum_sales", + "tmp1.i_manufact_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1200i64, 1201i64, 1202i64, 1203i64, 1204i64, 1205i64, 1206i64, 1207i64, 1208i64, 1209i64, 1210i64, 1211i64], $.d_month_seq)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_qoy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) and vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class)) and vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand)) or ((vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category) and vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class)) and vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand)))", + "(vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) or vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category))", + "(vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class) or vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class))", + "(vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand) or vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "i_manufact_id", + "d_qoy" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manufact_id)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "sum_sales", + "avg_quarterly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_quarterly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_quarterly_sales)) / avg_quarterly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manufact_id", + "sum_sales", + "avg_quarterly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([1200i64, 1201i64, 1202i64, 1203i64, 1204i64, 1205i64, 1206i64, 1207i64, 1208i64, 1209i64, 1210i64, 1211i64], $.d_month_seq)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_qoy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) and vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class)) and vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand)) or ((vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category) and vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class)) and vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand)))", + "(vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) or vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category))", + "(vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class) or vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class))", + "(vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand) or vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand))" + ], + "Projections": [ + "i_item_sk", + "i_manufact_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "d_qoy", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Projections": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manufact_id)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Projections": [ + "i_manufact_id", + "sum_sales", + "avg_quarterly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((avg_quarterly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_quarterly_sales)) / avg_quarterly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "tmp1.avg_quarterly_sales ASC", + "tmp1.sum_sales ASC", + "tmp1.i_manufact_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q54.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q54.slt.no new file mode 100644 index 00000000000..5b88d846fc8 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q54.slt.no @@ -0,0 +1,2153 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH my_customers AS + (SELECT DISTINCT c_customer_sk, + c_current_addr_sk + FROM + (SELECT cs_sold_date_sk sold_date_sk, + cs_bill_customer_sk customer_sk, + cs_item_sk item_sk + FROM catalog_sales + UNION ALL SELECT ws_sold_date_sk sold_date_sk, + ws_bill_customer_sk customer_sk, + ws_item_sk item_sk + FROM web_sales) cs_or_ws_sales, + item, + date_dim, + customer + WHERE sold_date_sk = d_date_sk + AND item_sk = i_item_sk + AND i_category = 'Women' + AND i_class = 'maternity' + AND c_customer_sk = cs_or_ws_sales.customer_sk + AND d_moy = 12 + AND d_year = 1998 ), + my_revenue AS + (SELECT c_customer_sk, + sum(ss_ext_sales_price) AS revenue + FROM my_customers, + store_sales, + customer_address, + store, + date_dim + WHERE c_current_addr_sk = ca_address_sk + AND ca_county = s_county + AND ca_state = s_state + AND ss_sold_date_sk = d_date_sk + AND c_customer_sk = ss_customer_sk + AND d_month_seq BETWEEN + (SELECT DISTINCT d_month_seq+1 + FROM date_dim + WHERE d_year = 1998 + AND d_moy = 12) AND + (SELECT DISTINCT d_month_seq+3 + FROM date_dim + WHERE d_year = 1998 + AND d_moy = 12) + GROUP BY c_customer_sk), + segments AS + (SELECT cast(round(revenue/50) AS int) AS SEGMENT + FROM my_revenue) +SELECT SEGMENT, + count(*) AS num_customers, + SEGMENT*50 AS segment_base +FROM segments +GROUP BY SEGMENT +ORDER BY SEGMENT NULLS FIRST, + num_customers NULLS FIRST, + segment_base +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "customer_sk", + "item_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "customer_sk", + "item_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(sold_date_sk = d_date_sk)", + "(item_sk = i_item_sk)", + "(i_category = CAST('Women' AS VARCHAR))", + "(i_class = CAST('maternity' AS VARCHAR))", + "(c_customer_sk = customer_sk)", + "(d_moy = CAST(12 AS BIGINT))", + "(d_year = CAST(1998 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_customer_sk", + "c_current_addr_sk" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(12 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_month_seq + CAST(1 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": "(d_month_seq + 1)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[99.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[118.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[118.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(12 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_month_seq + CAST(3 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": "(d_month_seq + 3)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[112.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[121.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[121.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_current_addr_sk = ca_address_sk)", + "(ca_county = s_county)", + "(ca_state = s_state)", + "(ss_sold_date_sk = d_date_sk)", + "(c_customer_sk = ss_customer_sk)", + "(d_month_seq >= SUBQUERY)", + "(d_month_seq <= SUBQUERY)" + ] + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "revenue" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "SEGMENT" + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Groups": "SEGMENT", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": [ + "SEGMENT", + "num_customers", + "segment_base" + ] + } + } + ], + "extra_info": { + "Order By": [ + "segments.SEGMENT", + "count_star()", + "(segments.SEGMENT * 50)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "segments", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "my_revenue", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "my_customers", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_county", + "s_state" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_county", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "customer_sk", + "item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "sold_date_sk", + "customer_sk", + "item_sk" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "215289" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 12i64)", + "($.d_year = 1998i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sold_date_sk = d_date_sk)", + "Estimated Cardinality": "43046" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.i_category = \"Women\")", + "($.i_class = \"maternity\")" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(item_sk = i_item_sk)", + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = customer_sk)", + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "8609", + "Distinct Targets": [ + "c_customer_sk", + "c_current_addr_sk" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "8609" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_month_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 12i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "(d_month_seq + 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "__internal_compress_integral_usmallint(#0, 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2921", + "Distinct Targets": "(d_month_seq + 1)" + } + } + ], + "extra_info": { + "Expressions": "__internal_decompress_integral_bigint(#0, 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_month_seq >= SUBQUERY)", + "Estimated Cardinality": "357" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 12i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "(d_month_seq + 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "__internal_compress_integral_usmallint(#0, 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2921", + "Distinct Targets": "(d_month_seq + 3)" + } + } + ], + "extra_info": { + "Expressions": "__internal_decompress_integral_bigint(#0, 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_month_seq <= SUBQUERY)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ss_customer_sk)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = c_current_addr_sk)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(s_county = ca_county)", + "(s_state = ca_state)" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "c_customer_sk", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "revenue", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "#0", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "SEGMENT", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "#0", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "SEGMENT", + "Expressions": "count_star()", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "SEGMENT", + "num_customers", + "segment_base" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_county", + "s_state" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_county", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "sold_date_sk", + "customer_sk", + "item_sk" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=12" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sold_date_sk = d_date_sk", + "Estimated Cardinality": "43046" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "i_class='maternity'", + "i_category='Women'" + ], + "Projections": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "item_sk = i_item_sk", + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = customer_sk", + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "", + "Estimated Cardinality": "8609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "8609" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "NESTED_LOOP_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_month_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=12" + ], + "Projections": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "(d_month_seq + 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_compress_integral_usmallint(#0, 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "(d_month_seq + 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_decompress_integral_bigint(#0, 1)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_month_seq >= SUBQUERY", + "Estimated Cardinality": "357" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=12" + ], + "Projections": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "(d_month_seq + 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_compress_integral_usmallint(#0, 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "(d_month_seq + 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_decompress_integral_bigint(#0, 3)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_month_seq <= SUBQUERY", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ss_customer_sk", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = c_current_addr_sk", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "s_county = ca_county", + "s_state = ca_state" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": "revenue", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": "SEGMENT", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": "SEGMENT", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "count_star()", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "SEGMENT", + "num_customers", + "segment_base" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "segments.SEGMENT ASC", + "count_star() ASC", + "(segments.SEGMENT * 50) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q55.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q55.slt.no new file mode 100644 index 00000000000..85a045049ea --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q55.slt.no @@ -0,0 +1,509 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_brand_id brand_id, + i_brand brand, + sum(ss_ext_sales_price) ext_price +FROM date_dim, + store_sales, + item +WHERE d_date_sk = ss_sold_date_sk + AND ss_item_sk = i_item_sk + AND i_manager_id=28 + AND d_moy=11 + AND d_year=1999 +GROUP BY i_brand, + i_brand_id +ORDER BY ext_price DESC, + i_brand_id +LIMIT 100 ; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(ss_item_sk = i_item_sk)", + "(i_manager_id = CAST(28 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "ext_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price)", + "memory.main.item.i_brand_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 1999i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manager_id = 28i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "#2" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "ext_price" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1999", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manager_id=28", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand", + "i_brand_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "#2" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "brand", + "ext_price" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sum(memory.main.store_sales.ss_ext_sales_price) DESC", + "memory.main.item.i_brand_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q56.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q56.slt.no new file mode 100644 index 00000000000..80d053ef631 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q56.slt.no @@ -0,0 +1,2103 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss AS + (SELECT i_item_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + cs AS + (SELECT i_item_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + ws AS + (SELECT i_item_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_color IN ('slate', + 'blanched', + 'burnished')) + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy = 2 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id) +SELECT i_item_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_item_id +ORDER BY total_sales NULLS FIRST, + i_item_id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_color IN (CAST('slate' AS VARCHAR), CAST('blanched' AS VARCHAR), CAST('burnished' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[45.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(2 AS BIGINT))", + "(ss_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_color IN (CAST('slate' AS VARCHAR), CAST('blanched' AS VARCHAR), CAST('burnished' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[100.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(2 AS BIGINT))", + "(cs_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_color IN (CAST('slate' AS VARCHAR), CAST('blanched' AS VARCHAR), CAST('burnished' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[155.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ws_item_sk = i_item_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(2 AS BIGINT))", + "(ws_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(total_sales)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(tmp1.total_sales)", + "tmp1.i_item_id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cs", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 2i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)", + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2864" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(total_sales)", + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Projections": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "2297" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Projections": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "1143" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "2864" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"slate\", \"blanched\", \"burnished\"], $.i_color)", + "Projections": "i_item_id", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "569" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sum(tmp1.total_sales) ASC", + "tmp1.i_item_id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q57.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q57.slt.no new file mode 100644 index 00000000000..5c097b1ff56 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q57.slt.no @@ -0,0 +1,1230 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH v1 AS + (SELECT i_category, + i_brand, + cc_name, + d_year, + d_moy, + sum(cs_sales_price) sum_sales, + avg(sum(cs_sales_price)) OVER (PARTITION BY i_category, + i_brand, + cc_name, + d_year) avg_monthly_sales, + rank() OVER (PARTITION BY i_category, + i_brand, + cc_name + ORDER BY d_year, + d_moy) rn + FROM item, + catalog_sales, + date_dim, + call_center + WHERE cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND cc_call_center_sk= cs_call_center_sk + AND (d_year = 1999 + OR (d_year = 1999-1 + AND d_moy =12) + OR (d_year = 1999+1 + AND d_moy =1)) + GROUP BY i_category, + i_brand, + cc_name, + d_year, + d_moy), + v2 AS + (SELECT v1.i_category, + v1.i_brand, + v1.cc_name, + v1.d_year, + v1.d_moy, + v1.avg_monthly_sales, + v1.sum_sales, + v1_lag.sum_sales psum, + v1_lead.sum_sales nsum + FROM v1, + v1 v1_lag, + v1 v1_lead + WHERE v1.i_category = v1_lag.i_category + AND v1.i_category = v1_lead.i_category + AND v1.i_brand = v1_lag.i_brand + AND v1.i_brand = v1_lead.i_brand + AND v1. cc_name = v1_lag. cc_name + AND v1. cc_name = v1_lead. cc_name + AND v1.rn = v1_lag.rn + 1 + AND v1.rn = v1_lead.rn - 1) +SELECT * +FROM v2 +WHERE d_year = 1999 + AND avg_monthly_sales > 0 + AND CASE + WHEN avg_monthly_sales > 0 THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales NULLS FIRST, 1, 2, 3, 4, 5, 6, 7, 8, 9 +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_rec_start_date", + "cc_rec_end_date", + "cc_closed_date_sk", + "cc_open_date_sk", + "cc_name", + "cc_class", + "cc_employees", + "cc_sq_ft", + "cc_hours", + "cc_manager", + "cc_mkt_id", + "cc_mkt_class", + "cc_mkt_desc", + "cc_market_manager", + "cc_division", + "cc_division_name", + "cc_company", + "cc_company_name", + "cc_street_number", + "cc_street_name", + "cc_street_type", + "cc_suite_number", + "cc_city", + "cc_county", + "cc_state", + "cc_zip", + "cc_country", + "cc_gmt_offset", + "cc_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(cc_call_center_sk = cs_call_center_sk)", + "((d_year = CAST(1999 AS BIGINT)) OR ((d_year = CAST((1999 - 1) AS BIGINT)) AND (d_moy = CAST(12 AS BIGINT))) OR ((d_year = CAST((1999 + 1) AS BIGINT)) AND (d_moy = CAST(1 AS BIGINT))))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy" + ], + "Expressions": "sum(cs_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "avg(sum(cs_sales_price)) OVER (PARTITION BY i_category, i_brand, cc_name, d_year)", + "RANK() OVER (PARTITION BY i_category, i_brand, cc_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "rn" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_category = i_category)", + "(i_category = i_category)", + "(i_brand = i_brand)", + "(i_brand = i_brand)", + "(cc_name = cc_name)", + "(cc_name = cc_name)", + "(rn = (rn + CAST(1 AS BIGINT)))", + "(rn = (rn - CAST(1 AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(1999 AS BIGINT))", + "(avg_monthly_sales > CAST(0 AS DOUBLE))", + "(CASE WHEN ((avg_monthly_sales > CAST(0 AS DOUBLE))) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE CAST(NULL AS DOUBLE) END > CAST(0.1 AS DOUBLE))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "#[46.9]", + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[46.0]", + "#[46.1]", + "#[46.2]", + "#[46.3]", + "#[46.4]", + "#[46.5]", + "#[46.6]", + "#[46.7]", + "#[46.8]" + ] + } + } + ], + "extra_info": { + "CTE Name": "v2", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_call_center_sk", + "cs_item_sk", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.d_year = 1999i64) or (($.d_year = 1998i64) and ($.d_moy = 12i64))) or (($.d_year = 2000i64) and ($.d_moy = 1i64)))", + "((($.d_year = 1999i64) or ($.d_year = 1998i64)) or ($.d_year = 2000i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_call_center_sk = cc_call_center_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy" + ], + "Expressions": "sum(cs_sales_price)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "avg(sum(cs_sales_price)) OVER (PARTITION BY i_category, i_brand, cc_name, d_year)", + "RANK() OVER (PARTITION BY i_category, i_brand, cc_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "rn" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_category = i_category)", + "(i_brand = i_brand)", + "(cc_name = cc_name)", + "((rn + 1) = (rn - 1))" + ], + "Estimated Cardinality": "11465185" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = 1999)", + "(avg_monthly_sales > 0.0)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_category = i_category)", + "(i_brand = i_brand)", + "(cc_name = cc_name)", + "((rn - 1) = rn)", + "((rn + 1) = rn)" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_call_center_sk", + "cs_item_sk", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "((($.d_year = 1999i64) or (($.d_year = 1998i64) and ($.d_moy = 12i64))) or (($.d_year = 2000i64) and ($.d_moy = 1i64)))", + "((($.d_year = 1999i64) or ($.d_year = 1998i64)) or ($.d_year = 2000i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cc_call_center_sk", + "cc_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_call_center_sk = cc_call_center_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "__internal_compress_integral_utinyint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "sum(#5)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": "avg(sum(cs_sales_price)) OVER (PARTITION BY i_category, i_brand, cc_name, d_year)" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY i_category, i_brand, cc_name ORDER BY d_year ASC NULLS LAST, d_moy ASC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_category = i_category", + "i_brand = i_brand", + "cc_name = cc_name", + "(rn + 1) = (rn - 1)" + ], + "Estimated Cardinality": "11465185" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expression": "((d_year = 1999) AND (avg_monthly_sales > 0.0))", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_category = i_category", + "i_brand = i_brand", + "cc_name = cc_name", + "(rn - 1) = rn", + "(rn + 1) = rn" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_brand", + "cc_name", + "d_year", + "d_moy", + "avg_monthly_sales", + "sum_sales", + "psum", + "nsum", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "915030074" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "#9 ASC", + "i_category ASC", + "i_brand ASC", + "cc_name ASC", + "d_year ASC", + "d_moy ASC", + "avg_monthly_sales ASC", + "sum_sales ASC", + "psum ASC", + "nsum ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "v1", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q58.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q58.slt.no new file mode 100644 index 00000000000..5516e6e773f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q58.slt.no @@ -0,0 +1,2537 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss_items AS + (SELECT i_item_id item_id, + sum(ss_ext_sales_price) ss_item_rev + FROM store_sales, + item, + date_dim + WHERE ss_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND ss_sold_date_sk = d_date_sk + GROUP BY i_item_id), + cs_items AS + (SELECT i_item_id item_id, + sum(cs_ext_sales_price) cs_item_rev + FROM catalog_sales, + item, + date_dim + WHERE cs_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND cs_sold_date_sk = d_date_sk + GROUP BY i_item_id), + ws_items AS + (SELECT i_item_id item_id, + sum(ws_ext_sales_price) ws_item_rev + FROM web_sales, + item, + date_dim + WHERE ws_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq = + (SELECT d_week_seq + FROM date_dim + WHERE d_date = '2000-01-03')) + AND ws_sold_date_sk = d_date_sk + GROUP BY i_item_id) +SELECT ss_items.item_id, + ss_item_rev, + ss_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ss_dev, + cs_item_rev, + cs_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 cs_dev, + ws_item_rev, + ws_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ws_dev, + (ss_item_rev+cs_item_rev+ws_item_rev)/3 average +FROM ss_items, + cs_items, + ws_items +WHERE ss_items.item_id=cs_items.item_id + AND ss_items.item_id=ws_items.item_id + AND ss_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev + AND ss_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev + AND cs_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev + AND cs_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev + AND ws_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev + AND ws_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev +ORDER BY ss_items.item_id NULLS FIRST, + ss_item_rev NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date = CAST('2000-01-03' AS DATE))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[50.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[56.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[56.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_week_seq = SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[37.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "SUBQUERY", + "(ss_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ss_item_rev" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date = CAST('2000-01-03' AS DATE))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[108.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[114.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[114.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_week_seq = SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[95.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = i_item_sk)", + "SUBQUERY", + "(cs_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "cs_item_rev" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date = CAST('2000-01-03' AS DATE))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[166.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[172.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[172.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_week_seq = SUBQUERY)" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[153.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_item_sk = i_item_sk)", + "SUBQUERY", + "(ws_sold_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ws_item_rev" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(item_id = item_id)", + "(item_id = item_id)", + "(CAST(ss_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * cs_item_rev))", + "(CAST(ss_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * ws_item_rev))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * ss_item_rev))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * ws_item_rev))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * ss_item_rev))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) >= (CAST(0.9 AS DECIMAL(38,1)) * cs_item_rev))", + "(CAST(ss_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * cs_item_rev))", + "(CAST(ss_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * ws_item_rev))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * ss_item_rev))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * ws_item_rev))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * ss_item_rev))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) <= (CAST(1.1 AS DECIMAL(38,1)) * cs_item_rev))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ss_item_rev", + "ss_dev", + "cs_item_rev", + "cs_dev", + "ws_item_rev", + "ws_dev", + "average" + ] + } + } + ], + "extra_info": { + "Order By": [ + "ss_items.item_id", + "ss_items.ss_item_rev" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ws_items", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cs_items", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss_items", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.d_date = 2000-01-03)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = SUBQUERY)", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)", + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "cs_item_rev" + ], + "Estimated Cardinality": "26040" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "26040" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.d_date = 2000-01-03)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = SUBQUERY)", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14609" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "13215" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ws_item_rev" + ], + "Estimated Cardinality": "13215" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "13215" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(item_id = item_id)", + "(CAST(cs_item_rev AS DECIMAL(38,3)) >= (0.9 * ws_item_rev))", + "((0.9 * cs_item_rev) <= CAST(ws_item_rev AS DECIMAL(38,3)))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) <= (1.1 * ws_item_rev))", + "((1.1 * cs_item_rev) >= CAST(ws_item_rev AS DECIMAL(38,3)))" + ], + "Estimated Cardinality": "199512" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.d_date = 2000-01-03)", + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = SUBQUERY)", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "52288" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ss_item_rev" + ], + "Estimated Cardinality": "52288" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "52288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(item_id = item_id)", + "((0.9 * ws_item_rev) <= CAST(ss_item_rev AS DECIMAL(38,3)))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) >= (0.9 * ss_item_rev))", + "((1.1 * ws_item_rev) >= CAST(ss_item_rev AS DECIMAL(38,3)))", + "(CAST(ws_item_rev AS DECIMAL(38,3)) <= (1.1 * ss_item_rev))", + "((0.9 * cs_item_rev) <= CAST(ss_item_rev AS DECIMAL(38,3)))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) >= (0.9 * ss_item_rev))", + "((1.1 * cs_item_rev) >= CAST(ss_item_rev AS DECIMAL(38,3)))", + "(CAST(cs_item_rev AS DECIMAL(38,3)) <= (1.1 * ss_item_rev))" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ss_item_rev", + "(CAST(((ss_item_rev + cs_item_rev) + ws_item_rev) AS DOUBLE) / 3.0)", + "cs_item_rev", + "ws_item_rev" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "ss_item_rev", + "ss_dev", + "cs_item_rev", + "cs_dev", + "ws_item_rev", + "ws_dev", + "average" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_date='2000-01-03'::DATE", + "Projections": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = SUBQUERY", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Projections": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "26040" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_date='2000-01-03'::DATE", + "Projections": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = SUBQUERY", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Projections": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "13215" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "item_id = item_id", + "CAST(cs_item_rev AS DECIMAL(38,3)) >= (0.9 * ws_item_rev)", + "(0.9 * cs_item_rev) <= CAST(ws_item_rev AS DECIMAL(38,3))", + "CAST(cs_item_rev AS DECIMAL(38,3)) <= (1.1 * ws_item_rev)", + "(1.1 * cs_item_rev) >= CAST(ws_item_rev AS DECIMAL(38,3))" + ], + "Estimated Cardinality": "199512" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_date='2000-01-03'::DATE", + "Projections": "d_week_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = SUBQUERY", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Projections": "d_date", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "52288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "item_id = item_id", + "(0.9 * ws_item_rev) <= CAST(ss_item_rev AS DECIMAL(38,3))", + "CAST(ws_item_rev AS DECIMAL(38,3)) >= (0.9 * ss_item_rev)", + "(1.1 * ws_item_rev) >= CAST(ss_item_rev AS DECIMAL(38,3))", + "CAST(ws_item_rev AS DECIMAL(38,3)) <= (1.1 * ss_item_rev)", + "(0.9 * cs_item_rev) <= CAST(ss_item_rev AS DECIMAL(38,3))", + "CAST(cs_item_rev AS DECIMAL(38,3)) >= (0.9 * ss_item_rev)", + "(1.1 * cs_item_rev) >= CAST(ss_item_rev AS DECIMAL(38,3))", + "CAST(cs_item_rev AS DECIMAL(38,3)) <= (1.1 * ss_item_rev)" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Projections": [ + "item_id", + "ss_item_rev", + "(CAST(((ss_item_rev + cs_item_rev) + ws_item_rev) AS DOUBLE) / 3.0)", + "cs_item_rev", + "ws_item_rev" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Projections": [ + "item_id", + "ss_item_rev", + "ss_dev", + "cs_item_rev", + "cs_dev", + "ws_item_rev", + "ws_dev", + "average" + ], + "Estimated Cardinality": "6048310" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "ss_items.item_id ASC", + "ss_items.ss_item_rev ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q59.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q59.slt.no new file mode 100644 index 00000000000..507038cd9ee --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q59.slt.no @@ -0,0 +1,1254 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH wss AS + (SELECT d_week_seq, + ss_store_sk, + sum(CASE + WHEN (d_day_name='Sunday') THEN ss_sales_price + ELSE NULL + END) sun_sales, + sum(CASE + WHEN (d_day_name='Monday') THEN ss_sales_price + ELSE NULL + END) mon_sales, + sum(CASE + WHEN (d_day_name='Tuesday') THEN ss_sales_price + ELSE NULL + END) tue_sales, + sum(CASE + WHEN (d_day_name='Wednesday') THEN ss_sales_price + ELSE NULL + END) wed_sales, + sum(CASE + WHEN (d_day_name='Thursday') THEN ss_sales_price + ELSE NULL + END) thu_sales, + sum(CASE + WHEN (d_day_name='Friday') THEN ss_sales_price + ELSE NULL + END) fri_sales, + sum(CASE + WHEN (d_day_name='Saturday') THEN ss_sales_price + ELSE NULL + END) sat_sales + FROM store_sales, + date_dim + WHERE d_date_sk = ss_sold_date_sk + GROUP BY d_week_seq, + ss_store_sk) +SELECT s_store_name1, + s_store_id1, + d_week_seq1, + sun_sales1/sun_sales2 AS sun_sales_ratio, + mon_sales1/mon_sales2 AS mon_sales_ratio, + tue_sales1/tue_sales2 AS tue_sales_ratio, + wed_sales1/wed_sales2 AS wed_sales_ratio, + thu_sales1/thu_sales2 AS thu_sales_ratio, + fri_sales1/fri_sales2 AS fri_sales_ratio, + sat_sales1/sat_sales2 AS sat_sales_ratio +FROM + (SELECT s_store_name s_store_name1, + wss.d_week_seq d_week_seq1, + s_store_id s_store_id1, + sun_sales sun_sales1, + mon_sales mon_sales1, + tue_sales tue_sales1, + wed_sales wed_sales1, + thu_sales thu_sales1, + fri_sales fri_sales1, + sat_sales sat_sales1 + FROM wss, + store, + date_dim d + WHERE d.d_week_seq = wss.d_week_seq + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1212 AND 1212 + 11) y, + (SELECT s_store_name s_store_name2, + wss.d_week_seq d_week_seq2, + s_store_id s_store_id2, + sun_sales sun_sales2, + mon_sales mon_sales2, + tue_sales tue_sales2, + wed_sales wed_sales2, + thu_sales thu_sales2, + fri_sales fri_sales2, + sat_sales sat_sales2 + FROM wss, + store, + date_dim d + WHERE d.d_week_seq = wss.d_week_seq + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1212 + 12 AND 1212 + 23) x +WHERE s_store_id1=s_store_id2 + AND d_week_seq1=d_week_seq2-52 +ORDER BY s_store_name1 NULLS FIRST, + s_store_id1 NULLS FIRST, + d_week_seq1 NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(d_date_sk = ss_sold_date_sk)" + } + } + ], + "extra_info": { + "Groups": [ + "d_week_seq", + "ss_store_sk" + ], + "Expressions": [ + "sum(CASE WHEN ((d_day_name = CAST('Sunday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Monday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Tuesday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Wednesday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Thursday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Friday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)", + "sum(CASE WHEN ((d_day_name = CAST('Saturday' AS VARCHAR))) THEN (ss_sales_price) ELSE CAST(NULL AS DECIMAL(7,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq", + "ss_store_sk", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_week_seq = d_week_seq)", + "(ss_store_sk = s_store_sk)", + "(d_month_seq >= CAST(1212 AS BIGINT))", + "(d_month_seq <= CAST((1212 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name1", + "d_week_seq1", + "s_store_id1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_week_seq = d_week_seq)", + "(ss_store_sk = s_store_sk)", + "(d_month_seq >= CAST((1212 + 12) AS BIGINT))", + "(d_month_seq <= CAST((1212 + 23) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name2", + "d_week_seq2", + "s_store_id2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(s_store_id1 = s_store_id2)", + "(d_week_seq1 = (d_week_seq2 - CAST(52 AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name1", + "s_store_id1", + "d_week_seq1", + "sun_sales_ratio", + "mon_sales_ratio", + "tue_sales_ratio", + "wed_sales_ratio", + "thu_sales_ratio", + "fri_sales_ratio", + "sat_sales_ratio" + ] + } + } + ], + "extra_info": { + "Order By": [ + "y.s_store_name1", + "y.s_store_id1", + "y.d_week_seq1" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "wss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_week_seq", + "d_day_name" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "d_week_seq", + "ss_store_sk" + ], + "Expressions": [ + "sum(CASE WHEN ((d_day_name = 'Sunday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Monday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Tuesday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Wednesday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Thursday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Friday')) THEN (ss_sales_price) ELSE NULL END)", + "sum(CASE WHEN ((d_day_name = 'Saturday')) THEN (ss_sales_price) ELSE NULL END)" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq", + "ss_store_sk", + "sun_sales", + "mon_sales", + "tue_sales", + "wed_sales", + "thu_sales", + "fri_sales", + "sat_sales" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(1212i64 <= $.d_month_seq <= 1223i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = d_week_seq)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name1", + "d_week_seq1", + "s_store_id1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(1224i64 <= $.d_month_seq <= 1235i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = d_week_seq)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "d_week_seq2", + "s_store_id2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(s_store_id1 = s_store_id2)", + "(d_week_seq1 = (d_week_seq2 - 52))" + ], + "Estimated Cardinality": "288462" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name1", + "s_store_id1", + "d_week_seq1", + "sun_sales_ratio", + "mon_sales_ratio", + "tue_sales_ratio", + "wed_sales_ratio", + "thu_sales_ratio", + "fri_sales_ratio", + "sat_sales_ratio" + ], + "Estimated Cardinality": "288462" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "wss", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_week_seq", + "d_day_name" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 1)", + "#3" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq", + "ss_store_sk", + "CASE WHEN ((d_day_name = 'Sunday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Monday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Tuesday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Wednesday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Thursday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Friday')) THEN (ss_sales_price) ELSE NULL END", + "CASE WHEN ((d_day_name = 'Saturday')) THEN (ss_sales_price) ELSE NULL END" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)", + "sum(#4)", + "sum(#5)", + "sum(#6)", + "sum(#7)", + "sum(#8)" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288463" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288463" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(1212i64 <= $.d_month_seq <= 1223i64)", + "Projections": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = d_week_seq", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name1", + "d_week_seq1", + "s_store_id1", + "sun_sales1", + "mon_sales1", + "tue_sales1", + "wed_sales1", + "thu_sales1", + "fri_sales1", + "sat_sales1" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "288463" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288463" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(1224i64 <= $.d_month_seq <= 1235i64)", + "Projections": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = d_week_seq", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "d_week_seq2", + "s_store_id2", + "sun_sales2", + "mon_sales2", + "tue_sales2", + "wed_sales2", + "thu_sales2", + "fri_sales2", + "sat_sales2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "s_store_id1 = s_store_id2", + "d_week_seq1 = (d_week_seq2 - 52)" + ], + "Estimated Cardinality": "288462" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name1", + "s_store_id1", + "d_week_seq1", + "sun_sales_ratio", + "mon_sales_ratio", + "tue_sales_ratio", + "wed_sales_ratio", + "thu_sales_ratio", + "fri_sales_ratio", + "sat_sales_ratio" + ], + "Estimated Cardinality": "288462" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "y.s_store_name1 ASC", + "y.s_store_id1 ASC", + "y.d_week_seq1 ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "wss", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q6.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q6.slt.no new file mode 100644 index 00000000000..9802384eb1b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q6.slt.no @@ -0,0 +1,1222 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT a.ca_state state, + count(*) cnt +FROM customer_address a , + customer c , + store_sales s , + date_dim d , + item i +WHERE a.ca_address_sk = c.c_current_addr_sk + AND c.c_customer_sk = s.ss_customer_sk + AND s.ss_sold_date_sk = d.d_date_sk + AND s.ss_item_sk = i.i_item_sk + AND d.d_month_seq = + (SELECT DISTINCT (d_month_seq) + FROM date_dim + WHERE d_year = 2001 + AND d_moy = 1 ) + AND i.i_current_price > 1.2 * + (SELECT avg(j.i_current_price) + FROM item j + WHERE j.i_category = i.i_category) +GROUP BY a.ca_state +HAVING count(*) >= 10 +ORDER BY cnt NULLS FIRST, + a.ca_state NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy = CAST(1 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": "d_month_seq" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": "d_month_seq" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[48.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[67.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[67.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = i_category)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(i_current_price)" + } + } + ], + "extra_info": { + "Expressions": "avg(i_current_price)" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ca_address_sk = c_current_addr_sk)", + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)", + "(d_month_seq = SUBQUERY)", + "(CAST(i_current_price AS DOUBLE) > (CAST(1.2 AS DOUBLE) * SUBQUERY))" + ] + } + } + ], + "extra_info": { + "Groups": "ca_state", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "(count_star() >= CAST(10 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "state", + "cnt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "count_star()", + "a.ca_state" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_current_price", + "i_category" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_month_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "($.d_moy = 1i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "__internal_compress_integral_usmallint(#0, 0)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2921", + "Distinct Targets": "d_month_seq" + } + } + ], + "extra_info": { + "Expressions": "__internal_decompress_integral_bigint(#0, 0)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_month_seq = SUBQUERY)", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(i_item_sk = ss_item_sk)", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ss_customer_sk)", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = c_current_addr_sk)", + "Estimated Cardinality": "98" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(i_category = i_category)", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Expressions": [ + "i_current_price", + "i_category" + ], + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Groups": "i_category", + "Expressions": "avg(i_current_price)", + "Estimated Cardinality": "48" + } + } + ], + "extra_info": { + "Expressions": [ + "avg(i_current_price)", + "i_category" + ], + "Estimated Cardinality": "48" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(i_category IS NOT DISTINCT FROM i_category)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(i_current_price AS DOUBLE) > (1.2 * SUBQUERY))", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Groups": "ca_state", + "Expressions": "count_star()", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Expressions": "(count_star() >= 10)", + "Estimated Cardinality": "19" + } + } + ], + "extra_info": { + "Expressions": [ + "state", + "cnt" + ], + "Estimated Cardinality": "19" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "19" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_current_price", + "i_category" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_month_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=2001", + "d_moy=1" + ], + "Projections": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_compress_integral_usmallint(#0, 0)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "d_month_seq", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "__internal_decompress_integral_bigint(#0, 0)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_month_seq = SUBQUERY", + "Estimated Cardinality": "25" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "i_item_sk = ss_item_sk", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ss_customer_sk", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = c_current_addr_sk", + "Estimated Cardinality": "98" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_current_price", + "i_category" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "i_category = i_category", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Projections": [ + "i_current_price", + "i_category" + ], + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_current_price" + ], + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "48" + } + } + ], + "extra_info": { + "Projections": [ + "avg(i_current_price)", + "i_category" + ], + "Estimated Cardinality": "48" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_category IS NOT DISTINCT FROM i_category", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#2", + "Aggregates": "", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_category IS NOT DISTINCT FROM i_category", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(i_current_price AS DOUBLE) > (1.2 * SUBQUERY))", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Projections": "ca_state", + "Estimated Cardinality": "98" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "count_star()", + "Estimated Cardinality": "97" + } + } + ], + "extra_info": { + "Expression": "(count_star() >= 10)", + "Estimated Cardinality": "19" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "count_star() ASC", + "a.ca_state ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q60.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q60.slt.no new file mode 100644 index 00000000000..9295076f126 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q60.slt.no @@ -0,0 +1,2097 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss AS + (SELECT i_item_id, + sum(ss_ext_sales_price) total_sales + FROM store_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category ='Music') + AND ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND ss_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + cs AS + (SELECT i_item_id, + sum(cs_ext_sales_price) total_sales + FROM catalog_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category ='Music') + AND cs_item_sk = i_item_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND cs_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id), + ws AS + (SELECT i_item_id, + sum(ws_ext_sales_price) total_sales + FROM web_sales, + date_dim, + customer_address, + item + WHERE i_item_id IN + (SELECT i_item_id + FROM item + WHERE i_category = 'Music') + AND ws_item_sk = i_item_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 1998 + AND d_moy = 9 + AND ws_bill_addr_sk = ca_address_sk + AND ca_gmt_offset = -5 + GROUP BY i_item_id) +SELECT i_item_id, + sum(total_sales) total_sales +FROM + (SELECT * + FROM ss + UNION ALL SELECT * + FROM cs + UNION ALL SELECT * + FROM ws) tmp1 +GROUP BY i_item_id +ORDER BY i_item_id, + total_sales +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Music' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[45.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(9 AS BIGINT))", + "(ss_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Music' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[100.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(cs_item_sk = i_item_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(9 AS BIGINT))", + "(cs_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Music' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": "i_item_id" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(i_item_id = #[155.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "SUBQUERY", + "(ws_item_sk = i_item_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(9 AS BIGINT))", + "(ws_bill_addr_sk = ca_address_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(total_sales)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "tmp1.i_item_id", + "sum(tmp1.total_sales)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cs", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 9i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Music\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "2297" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "2297" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 9i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "5744" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Music\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cs_ext_sales_price)", + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "1143" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "1143" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 9i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2864" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Music\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(i_item_id = #0)", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(ws_ext_sales_price)", + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "569" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(total_sales)", + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_addr_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=9" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Music'", + "Projections": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "2297" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_addr_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=9" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "5744" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Music'", + "Projections": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "1148" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "1143" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_addr_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=9" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_addr_sk = ca_address_sk", + "Estimated Cardinality": "2864" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Music'", + "Projections": "i_item_id", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "i_item_id = #0", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "569" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "total_sales" + ], + "Estimated Cardinality": "4009" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "3981" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "tmp1.i_item_id ASC", + "sum(tmp1.total_sales) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q61.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q61.slt.no new file mode 100644 index 00000000000..54d79710877 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q61.slt.no @@ -0,0 +1,1531 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT promotions, + total, + cast(promotions AS decimal(15,4))/cast(total AS decimal(15,4))*100 +FROM + (SELECT sum(ss_ext_sales_price) promotions + FROM store_sales, + store, + promotion, + date_dim, + customer, + customer_address, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND ss_promo_sk = p_promo_sk + AND ss_customer_sk= c_customer_sk + AND ca_address_sk = c_current_addr_sk + AND ss_item_sk = i_item_sk + AND ca_gmt_offset = -5 + AND i_category = 'Jewelry' + AND (p_channel_dmail = 'Y' + OR p_channel_email = 'Y' + OR p_channel_tv = 'Y') + AND s_gmt_offset = -5 + AND d_year = 1998 + AND d_moy = 11) promotional_sales, + (SELECT sum(ss_ext_sales_price) total + FROM store_sales, + store, + date_dim, + customer, + customer_address, + item + WHERE ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND ss_customer_sk= c_customer_sk + AND ca_address_sk = c_current_addr_sk + AND ss_item_sk = i_item_sk + AND ca_gmt_offset = -5 + AND i_category = 'Jewelry' + AND s_gmt_offset = -5 + AND d_year = 1998 + AND d_moy = 11) all_sales +ORDER BY promotions, + total +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_promo_sk = p_promo_sk)", + "(ss_customer_sk = c_customer_sk)", + "(ca_address_sk = c_current_addr_sk)", + "(ss_item_sk = i_item_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))", + "(i_category = CAST('Jewelry' AS VARCHAR))", + "((p_channel_dmail = CAST('Y' AS VARCHAR)) OR (p_channel_email = CAST('Y' AS VARCHAR)) OR (p_channel_tv = CAST('Y' AS VARCHAR)))", + "(CAST(s_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "promotions" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_customer_sk = c_customer_sk)", + "(ca_address_sk = c_current_addr_sk)", + "(ss_item_sk = i_item_sk)", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))", + "(i_category = CAST('Jewelry' AS VARCHAR))", + "(CAST(s_gmt_offset AS DECIMAL(12,2)) = CAST(-5 AS DECIMAL(12,2)))", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "total" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "promotions", + "total", + "((CAST(CAST(promotions AS DECIMAL(15,4)) AS DOUBLE) / CAST(CAST(total AS DECIMAL(15,4)) AS DOUBLE)) * CAST(100 AS DOUBLE))" + ] + } + } + ], + "extra_info": { + "Order By": [ + "promotional_sales.promotions", + "all_sales.total" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 11i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Jewelry\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "2307" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "2307" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "((($.p_channel_dmail = \"Y\") or ($.p_channel_email = \"Y\")) or ($.p_channel_tv = \"Y\"))", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_promo_sk = p_promo_sk)", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "promotions", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 11i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Jewelry\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "2307" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.s_gmt_offset = decimal128(-500, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "total", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "promotions", + "total", + "((CAST(CAST(promotions AS DECIMAL(15,4)) AS DOUBLE) / CAST(CAST(total AS DECIMAL(15,4)) AS DOUBLE)) * 100.0)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Jewelry'", + "Projections": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "2307" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_gmt_offset=-5.00", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "2307" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "((($.p_channel_dmail = \"Y\") or ($.p_channel_email = \"Y\")) or ($.p_channel_tv = \"Y\"))", + "Projections": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_promo_sk = p_promo_sk", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": "ss_ext_sales_price", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Aggregates": "sum(#0)" + } + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_store_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Jewelry'", + "Projections": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-5.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "2307" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "s_gmt_offset=-5.00", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Projections": "ss_ext_sales_price", + "Estimated Cardinality": "2307" + } + } + ], + "extra_info": { + "Aggregates": "sum(#0)" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "promotions", + "total", + "((CAST(CAST(promotions AS DECIMAL(15,4)) AS DOUBLE) / CAST(CAST(total AS DECIMAL(15,4)) AS DOUBLE)) * 100.0)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "promotional_sales.promotions ASC", + "all_sales.total ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q62.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q62.slt.no new file mode 100644 index 00000000000..47e63dd6992 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q62.slt.no @@ -0,0 +1,779 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT w_substr, + sm_type, + web_name, + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 30) + AND (ws_ship_date_sk - ws_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 60) + AND (ws_ship_date_sk - ws_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 90) + AND (ws_ship_date_sk - ws_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (ws_ship_date_sk - ws_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM web_sales, + (SELECT SUBSTRING(w_warehouse_name,1,20) w_substr, + * + FROM warehouse) sq1, + ship_mode, + web_site, + date_dim +WHERE d_month_seq BETWEEN 1200 AND 1200 + 11 + AND ws_ship_date_sk = d_date_sk + AND ws_warehouse_sk = w_warehouse_sk + AND ws_ship_mode_sk = sm_ship_mode_sk + AND ws_web_site_sk = web_site_sk +GROUP BY w_substr, + sm_type, + web_name +ORDER BY 1 NULLS FIRST, + 2 NULLS FIRST, + 3 NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_ship_mode_id", + "sm_type", + "sm_code", + "sm_carrier", + "sm_contract" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id", + "web_rec_start_date", + "web_rec_end_date", + "web_name", + "web_open_date_sk", + "web_close_date_sk", + "web_class", + "web_manager", + "web_mkt_id", + "web_mkt_class", + "web_mkt_desc", + "web_market_manager", + "web_company_id", + "web_company_name", + "web_street_number", + "web_street_name", + "web_street_type", + "web_suite_number", + "web_city", + "web_county", + "web_state", + "web_zip", + "web_country", + "web_gmt_offset", + "web_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(ws_ship_date_sk = d_date_sk)", + "(ws_warehouse_sk = w_warehouse_sk)", + "(ws_ship_mode_sk = sm_ship_mode_sk)", + "(ws_web_site_sk = web_site_sk)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_substr", + "sm_type", + "web_name" + ], + "Expressions": [ + "sum(CASE WHEN (((ws_ship_date_sk - ws_sold_date_sk) <= CAST(30 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((ws_ship_date_sk - ws_sold_date_sk) > CAST(30 AS BIGINT)) AND ((ws_ship_date_sk - ws_sold_date_sk) <= CAST(60 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((ws_ship_date_sk - ws_sold_date_sk) > CAST(60 AS BIGINT)) AND ((ws_ship_date_sk - ws_sold_date_sk) <= CAST(90 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((ws_ship_date_sk - ws_sold_date_sk) > CAST(90 AS BIGINT)) AND ((ws_ship_date_sk - ws_sold_date_sk) <= CAST(120 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN (((ws_ship_date_sk - ws_sold_date_sk) > CAST(120 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "web_name", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ] + } + } + ], + "extra_info": { + "Order By": [ + "w_substr", + "sm_type", + "web_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_ship_date_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "w_warehouse_sk" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_type" + ], + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_mode_sk = sm_ship_mode_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_name" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_site_sk = web_site_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "web_name", + "(ws_ship_date_sk - ws_sold_date_sk)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "w_substr", + "sm_type", + "web_name" + ], + "Expressions": [ + "sum(CASE WHEN ((#3 <= 30)) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 30) AND (#3 <= 60))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 60) AND (#3 <= 90))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 90) AND (#3 <= 120))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN ((#3 > 120)) THEN (1) ELSE 0 END)" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "web_name", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_ship_date_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "w_warehouse_sk" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sm_ship_mode_sk", + "sm_type" + ], + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_mode_sk = sm_ship_mode_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "web_site_sk", + "web_name" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_site_sk = web_site_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "sm_type", + "web_name", + "(ws_ship_date_sk - ws_sold_date_sk)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "sm_type", + "web_name", + "CASE WHEN ((#3 <= 30)) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 30) AND (#3 <= 60))) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 60) AND (#3 <= 90))) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 90) AND (#3 <= 120))) THEN (1) ELSE 0 END", + "CASE WHEN ((#3 > 120)) THEN (1) ELSE 0 END" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "sum(#5)", + "sum(#6)", + "sum(#7)" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "w_substr ASC", + "sm_type ASC", + "web_name ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q63.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q63.slt.no new file mode 100644 index 00000000000..0e4d88a3d00 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q63.slt.no @@ -0,0 +1,747 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT i_manager_id, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) OVER (PARTITION BY i_manager_id) avg_monthly_sales + FROM item, + store_sales, + date_dim, + store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_month_seq IN (1200, + 1200+1, + 1200+2, + 1200+3, + 1200+4, + 1200+5, + 1200+6, + 1200+7, + 1200+8, + 1200+9, + 1200+10, + 1200+11) + AND ((i_category IN ('Books', + 'Children', + 'Electronics') + AND i_class IN ('personal', + 'portable', + 'reference', + 'self-help') + AND i_brand IN ('scholaramalgamalg #14', + 'scholaramalgamalg #7', + 'exportiunivamalg #9', + 'scholaramalgamalg #9')) or(i_category IN ('Women','Music','Men') + AND i_class IN ('accessories','classical','fragrances','pants') + AND i_brand IN ('amalgimporto #1','edu packscholar #1','exportiimporto #1', 'importoamalg #1'))) + GROUP BY i_manager_id, + d_moy) tmp1 +WHERE CASE + WHEN avg_monthly_sales > 0 THEN ABS (sum_sales - avg_monthly_sales) / avg_monthly_sales + ELSE NULL + END > 0.1 +ORDER BY i_manager_id, + avg_monthly_sales, + sum_sales +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(d_month_seq IN (CAST(1200 AS BIGINT), CAST((1200 + 1) AS BIGINT), CAST((1200 + 2) AS BIGINT), CAST((1200 + 3) AS BIGINT), CAST((1200 + 4) AS BIGINT), CAST((1200 + 5) AS BIGINT), CAST((1200 + 6) AS BIGINT), CAST((1200 + 7) AS BIGINT), CAST((1200 + 8) AS BIGINT), CAST((1200 + 9) AS BIGINT), CAST((1200 + 10) AS BIGINT), CAST((1200 + 11) AS BIGINT)))", + "(((i_category IN (CAST('Books' AS VARCHAR), CAST('Children' AS VARCHAR), CAST('Electronics' AS VARCHAR))) AND (i_class IN (CAST('personal' AS VARCHAR), CAST('portable' AS VARCHAR), CAST('reference' AS VARCHAR), CAST('self-help' AS VARCHAR))) AND (i_brand IN (CAST('scholaramalgamalg #14' AS VARCHAR), CAST('scholaramalgamalg #7' AS VARCHAR), CAST('exportiunivamalg #9' AS VARCHAR), CAST('scholaramalgamalg #9' AS VARCHAR)))) OR ((i_category IN (CAST('Women' AS VARCHAR), CAST('Music' AS VARCHAR), CAST('Men' AS VARCHAR))) AND (i_class IN (CAST('accessories' AS VARCHAR), CAST('classical' AS VARCHAR), CAST('fragrances' AS VARCHAR), CAST('pants' AS VARCHAR))) AND (i_brand IN (CAST('amalgimporto #1' AS VARCHAR), CAST('edu packscholar #1' AS VARCHAR), CAST('exportiimporto #1' AS VARCHAR), CAST('importoamalg #1' AS VARCHAR)))))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_manager_id", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manager_id)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manager_id", + "sum_sales", + "avg_monthly_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales > CAST(0 AS DOUBLE))) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE CAST(NULL AS DOUBLE) END > CAST(0.1 AS DOUBLE))" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manager_id", + "sum_sales", + "avg_monthly_sales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "tmp1.i_manager_id", + "tmp1.avg_monthly_sales", + "tmp1.sum_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1200i64, 1201i64, 1202i64, 1203i64, 1204i64, 1205i64, 1206i64, 1207i64, 1208i64, 1209i64, 1210i64, 1211i64], $.d_month_seq)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) and vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class)) and vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand)) or ((vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category) and vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class)) and vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand)))", + "(vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) or vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category))", + "(vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class) or vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class))", + "(vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand) or vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_manager_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "i_manager_id", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manager_id)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manager_id", + "sum_sales", + "avg_monthly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": [ + "i_manager_id", + "sum_sales", + "avg_monthly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([1200i64, 1201i64, 1202i64, 1203i64, 1204i64, 1205i64, 1206i64, 1207i64, 1208i64, 1209i64, 1210i64, 1211i64], $.d_month_seq)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) and vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class)) and vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand)) or ((vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category) and vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class)) and vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand)))", + "(vortex.list.contains([\"Books\", \"Children\", \"Electronics\"], $.i_category) or vortex.list.contains([\"Women\", \"Music\", \"Men\"], $.i_category))", + "(vortex.list.contains([\"personal\", \"portable\", \"reference\", \"self-help\"], $.i_class) or vortex.list.contains([\"accessories\", \"classical\", \"fragrances\", \"pants\"], $.i_class))", + "(vortex.list.contains([\"scholaramalgamalg #14\", \"scholaramalgamalg #7\", \"exportiunivamalg #9\", \"scholaramalgamalg #9\"], $.i_brand) or vortex.list.contains([\"amalgimporto #1\", \"edu packscholar #1\", \"exportiimporto #1\", \"importoamalg #1\"], $.i_brand))" + ], + "Projections": [ + "i_item_sk", + "i_manager_id" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "__internal_compress_integral_utinyint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_manager_id", + "d_moy", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Projections": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_manager_id)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Projections": [ + "i_manager_id", + "sum_sales", + "avg_monthly_sales" + ], + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((avg_monthly_sales > 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "111295" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "tmp1.i_manager_id ASC", + "tmp1.avg_monthly_sales ASC", + "tmp1.sum_sales ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q64.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q64.slt.no new file mode 100644 index 00000000000..1565ec5d12b --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q64.slt.no @@ -0,0 +1,2893 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH cs_ui AS + (SELECT cs_item_sk, + sum(cs_ext_list_price) AS sale, + sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) AS refund + FROM catalog_sales, + catalog_returns + WHERE cs_item_sk = cr_item_sk + AND cs_order_number = cr_order_number + GROUP BY cs_item_sk + HAVING sum(cs_ext_list_price)>2*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)), + cross_sales AS + (SELECT i_product_name product_name, + i_item_sk item_sk, + s_store_name store_name, + s_zip store_zip, + ad1.ca_street_number b_street_number, + ad1.ca_street_name b_street_name, + ad1.ca_city b_city, + ad1.ca_zip b_zip, + ad2.ca_street_number c_street_number, + ad2.ca_street_name c_street_name, + ad2.ca_city c_city, + ad2.ca_zip c_zip, + d1.d_year AS syear, + d2.d_year AS fsyear, + d3.d_year s2year, + count(*) cnt, + sum(ss_wholesale_cost) s1, + sum(ss_list_price) s2, + sum(ss_coupon_amt) s3 + FROM store_sales, + store_returns, + cs_ui, + date_dim d1, + date_dim d2, + date_dim d3, + store, + customer, + customer_demographics cd1, + customer_demographics cd2, + promotion, + household_demographics hd1, + household_demographics hd2, + customer_address ad1, + customer_address ad2, + income_band ib1, + income_band ib2, + item + WHERE ss_store_sk = s_store_sk + AND ss_sold_date_sk = d1.d_date_sk + AND ss_customer_sk = c_customer_sk + AND ss_cdemo_sk= cd1.cd_demo_sk + AND ss_hdemo_sk = hd1.hd_demo_sk + AND ss_addr_sk = ad1.ca_address_sk + AND ss_item_sk = i_item_sk + AND ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number + AND ss_item_sk = cs_ui.cs_item_sk + AND c_current_cdemo_sk = cd2.cd_demo_sk + AND c_current_hdemo_sk = hd2.hd_demo_sk + AND c_current_addr_sk = ad2.ca_address_sk + AND c_first_sales_date_sk = d2.d_date_sk + AND c_first_shipto_date_sk = d3.d_date_sk + AND ss_promo_sk = p_promo_sk + AND hd1.hd_income_band_sk = ib1.ib_income_band_sk + AND hd2.hd_income_band_sk = ib2.ib_income_band_sk + AND cd1.cd_marital_status <> cd2.cd_marital_status + AND i_color IN ('purple', + 'burlywood', + 'indian', + 'spring', + 'floral', + 'medium') + AND i_current_price BETWEEN 64 AND 64 + 10 + AND i_current_price BETWEEN 64 + 1 AND 64 + 15 + GROUP BY i_product_name, + i_item_sk, + s_store_name, + s_zip, + ad1.ca_street_number, + ad1.ca_street_name, + ad1.ca_city, + ad1.ca_zip, + ad2.ca_street_number, + ad2.ca_street_name, + ad2.ca_city, + ad2.ca_zip, + d1.d_year, + d2.d_year, + d3.d_year) +SELECT cs1.product_name, + cs1.store_name, + cs1.store_zip, + cs1.b_street_number, + cs1.b_street_name, + cs1.b_city, + cs1.b_zip, + cs1.c_street_number, + cs1.c_street_name, + cs1.c_city, + cs1.c_zip, + cs1.syear cs1syear, + cs1.cnt cs1cnt, + cs1.s1 AS s11, + cs1.s2 AS s21, + cs1.s3 AS s31, + cs2.s1 AS s12, + cs2.s2 AS s22, + cs2.s3 AS s32, + cs2.syear, + cs2.cnt +FROM cross_sales cs1, + cross_sales cs2 +WHERE cs1.item_sk=cs2.item_sk + AND cs1.syear = 1999 + AND cs2.syear = 1999 + 1 + AND cs2.cnt <= cs1.cnt + AND cs1.store_name = cs2.store_name + AND cs1.store_zip = cs2.store_zip +ORDER BY cs1.product_name, + cs1.store_name, + cs2.cnt, + cs1.s1, + cs2.s1; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ] + } + } + ], + "extra_info": { + "Groups": "cs_item_sk", + "Expressions": [ + "sum(cs_ext_list_price)", + "sum(((cr_refunded_cash + cr_reversed_charge) + cr_store_credit))" + ] + } + } + ], + "extra_info": { + "Expressions": "(sum(cs_ext_list_price) > (CAST(2 AS DECIMAL(38,0)) * sum(((cr_refunded_cash + cr_reversed_charge) + cr_store_credit))))" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_item_sk", + "sale", + "refund" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ib_income_band_sk", + "ib_lower_bound", + "ib_upper_bound" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ib_income_band_sk", + "ib_lower_bound", + "ib_upper_bound" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk = s_store_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_customer_sk = c_customer_sk)", + "(ss_cdemo_sk = cd_demo_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_addr_sk = ca_address_sk)", + "(ss_item_sk = i_item_sk)", + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = cs_item_sk)", + "(c_current_cdemo_sk = cd_demo_sk)", + "(c_current_hdemo_sk = hd_demo_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(c_first_sales_date_sk = d_date_sk)", + "(c_first_shipto_date_sk = d_date_sk)", + "(ss_promo_sk = p_promo_sk)", + "(hd_income_band_sk = ib_income_band_sk)", + "(hd_income_band_sk = ib_income_band_sk)", + "(cd_marital_status != cd_marital_status)", + "(i_color IN (CAST('purple' AS VARCHAR), CAST('burlywood' AS VARCHAR), CAST('indian' AS VARCHAR), CAST('spring' AS VARCHAR), CAST('floral' AS VARCHAR), CAST('medium' AS VARCHAR)))", + "(CAST(i_current_price AS DECIMAL(12,2)) >= CAST(64 AS DECIMAL(12,2)))", + "(CAST(i_current_price AS DECIMAL(12,2)) >= CAST((64 + 1) AS DECIMAL(12,2)))", + "(CAST(i_current_price AS DECIMAL(12,2)) <= CAST((64 + 10) AS DECIMAL(12,2)))", + "(CAST(i_current_price AS DECIMAL(12,2)) <= CAST((64 + 15) AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_product_name", + "i_item_sk", + "s_store_name", + "s_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "d_year", + "d_year", + "d_year" + ], + "Expressions": [ + "count_star()", + "sum(ss_wholesale_cost)", + "sum(ss_list_price)", + "sum(ss_coupon_amt)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "product_name", + "item_sk", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "syear", + "fsyear", + "s2year", + "cnt", + "s1", + "s2", + "s3" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(item_sk = item_sk)", + "(syear = CAST(1999 AS BIGINT))", + "(syear = CAST((1999 + 1) AS BIGINT))", + "(cnt <= cnt)", + "(store_name = store_name)", + "(store_zip = store_zip)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "product_name", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "cs1syear", + "cs1cnt", + "s11", + "s21", + "s31", + "s12", + "s22", + "s32", + "syear", + "cnt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "cs1.product_name", + "cs1.store_name", + "cs2.cnt", + "cs1.s1", + "cs2.s1" + ] + } + } + ], + "extra_info": { + "CTE Name": "cross_sales", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "cs_ui", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_wholesale_cost", + "ss_list_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 1999i64) or ($.d_year = 2000i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status" + ], + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_promo_sk = p_promo_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Expressions": "ib_income_band_sk", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(hd_income_band_sk = ib_income_band_sk)", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([\"purple\", \"burlywood\", \"indian\", \"spring\", \"floral\", \"medium\"], $.i_color)", + "(decimal128(6500, precision=7, scale=2) <= $.i_current_price <= decimal128(7400, precision=7, scale=2))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2i64 <= $.cs_order_number <= 15999i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_item_sk", + "cs_order_number", + "cs_ext_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": "cs_item_sk", + "Expressions": [ + "sum(cs_ext_list_price)", + "sum(((cr_refunded_cash + cr_reversed_charge) + cr_store_credit))" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_item_sk", + "sale", + "refund" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": "(sum(cs_ext_list_price) > (2 * sum(((cr_refunded_cash + cr_reversed_charge) + cr_store_credit))))", + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(i_item_sk = cs_item_sk)", + "Estimated Cardinality": "72763441" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2448998i64 <= $.d_date_sk <= 2452648i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Expressions": "ib_income_band_sk", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(hd_income_band_sk = ib_income_band_sk)", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = c_first_sales_date_sk)", + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2449028i64 <= $.d_date_sk <= 2452678i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_first_shipto_date_sk = d_date_sk)", + "Estimated Cardinality": "533615" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status" + ], + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "10249689" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_customer_sk = c_customer_sk)", + "(cd_marital_status != cd_marital_status)" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#11, 1)", + "#10", + "#6", + "#7", + "#8", + "#9", + "#4", + "#5", + "#0", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1900)", + "__internal_compress_integral_utinyint(#17, 1900)", + "__internal_compress_integral_utinyint(#12, 1900)", + "#13", + "#14", + "#15", + "#16" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Groups": [ + "i_product_name", + "i_item_sk", + "s_store_name", + "s_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "d_year", + "d_year", + "d_year" + ], + "Expressions": [ + "count_star()", + "sum(ss_wholesale_cost)", + "sum(ss_list_price)", + "sum(ss_coupon_amt)" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "__internal_decompress_integral_bigint(#12, 1900)", + "__internal_decompress_integral_bigint(#13, 1900)", + "__internal_decompress_integral_bigint(#14, 1900)", + "#15", + "#16", + "#17", + "#18" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": [ + "product_name", + "item_sk", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "syear", + "cnt", + "s1", + "s2", + "s3" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16" + ] + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": "(syear = 1999)", + "Estimated Cardinality": "224028100764" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expressions": "(syear = 2000)", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(item_sk = item_sk)", + "(store_name = store_name)", + "(store_zip = store_zip)", + "(cnt >= cnt)" + ], + "Estimated Cardinality": "11495924774494705664" + } + } + ], + "extra_info": { + "Expressions": [ + "product_name", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "cs1syear", + "cs1cnt", + "s11", + "s21", + "s31", + "s12", + "s22", + "s32", + "syear", + "cnt" + ], + "Estimated Cardinality": "11495924774494705664" + } + } + ], + "extra_info": { + "Order By": [ + "cs1.product_name", + "cs1.store_name", + "cs2.cnt", + "cs1.s1", + "cs2.s1" + ], + "Estimated Cardinality": "11495924774494705664" + } + } + ], + "extra_info": { + "CTE Name": "cross_sales", + "Table Index": "1", + "Estimated Cardinality": "11495924774494705664" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_wholesale_cost", + "ss_list_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 1999i64) or ($.d_year = 2000i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2i64 <= $.cd_demo_sk <= 192076i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status" + ], + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "p_promo_sk", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_promo_sk = p_promo_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "ib_income_band_sk", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "hd_income_band_sk = ib_income_band_sk", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([\"purple\", \"burlywood\", \"indian\", \"spring\", \"floral\", \"medium\"], $.i_color)", + "(decimal128(6500, precision=7, scale=2) <= $.i_current_price <= decimal128(7400, precision=7, scale=2))" + ], + "Projections": [ + "i_item_sk", + "i_product_name" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_item_sk = sr_item_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2i64 <= $.cs_order_number <= 15999i64)", + "Projections": [ + "cs_item_sk", + "cs_order_number", + "cs_ext_list_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cs_item_sk = cr_item_sk", + "cs_order_number = cr_order_number" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "cs_item_sk", + "cs_ext_list_price", + "((cr_refunded_cash + cr_reversed_charge) + cr_store_credit)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expression": "(sum(cs_ext_list_price) > (2 * sum(((cr_refunded_cash + cr_reversed_charge) + cr_store_credit))))", + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "i_item_sk = cs_item_sk", + "Estimated Cardinality": "72763441" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2448998i64 <= $.d_date_sk <= 2452648i64)", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "ib_income_band_sk", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "hd_income_band_sk = ib_income_band_sk", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = c_first_sales_date_sk", + "Estimated Cardinality": "73049" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2449028i64 <= $.d_date_sk <= 2452678i64)", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_first_shipto_date_sk = d_date_sk", + "Estimated Cardinality": "533615" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status" + ], + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "10249689" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_customer_sk = c_customer_sk", + "cd_marital_status != cd_marital_status" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#11, 1)", + "#10", + "#6", + "#7", + "#8", + "#9", + "#4", + "#5", + "#0", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1900)", + "__internal_compress_integral_utinyint(#17, 1900)", + "__internal_compress_integral_utinyint(#12, 1900)", + "#13", + "#14", + "#15", + "#16" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Projections": [ + "i_product_name", + "i_item_sk", + "s_store_name", + "s_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "ca_street_number", + "ca_street_name", + "ca_city", + "ca_zip", + "d_year", + "d_year", + "d_year", + "ss_wholesale_cost", + "ss_list_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14" + ], + "Aggregates": [ + "count_star()", + "sum(#15)", + "sum(#16)", + "sum(#17)" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "__internal_decompress_integral_bigint(#12, 1900)", + "__internal_decompress_integral_bigint(#13, 1900)", + "__internal_decompress_integral_bigint(#14, 1900)", + "#15", + "#16", + "#17", + "#18" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Projections": [ + "product_name", + "item_sk", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "syear", + "cnt", + "s1", + "s2", + "s3" + ], + "Estimated Cardinality": "224028100764" + } + }, + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expression": "(syear = 1999)", + "Estimated Cardinality": "224028100764" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Expression": "(syear = 2000)", + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Projections": [ + "#1", + "#2", + "#3", + "#12", + "#13", + "#14", + "#15", + "#16" + ], + "Estimated Cardinality": "224028100764" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "item_sk = item_sk", + "store_name = store_name", + "store_zip = store_zip", + "cnt >= cnt" + ], + "Estimated Cardinality": "11495924774494705664" + } + } + ], + "extra_info": { + "Projections": [ + "product_name", + "store_name", + "store_zip", + "b_street_number", + "b_street_name", + "b_city", + "b_zip", + "c_street_number", + "c_street_name", + "c_city", + "c_zip", + "cs1syear", + "cs1cnt", + "s11", + "s21", + "s31", + "s12", + "s22", + "s32", + "syear", + "cnt" + ], + "Estimated Cardinality": "11495924774494705664" + } + } + ], + "extra_info": { + "Order By": [ + "cs1.product_name ASC", + "cs1.store_name ASC", + "cs2.cnt ASC", + "cs1.s1 ASC", + "cs2.s1 ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "cross_sales", + "Table Index": "1", + "Estimated Cardinality": "11495924774494705664" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q65.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q65.slt.no new file mode 100644 index 00000000000..dc367cec446 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q65.slt.no @@ -0,0 +1,1170 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT s_store_name, + i_item_desc, + sc.revenue, + i_current_price, + i_wholesale_cost, + i_brand +FROM store, + item, + (SELECT ss_store_sk, + avg(revenue) AS ave + FROM + (SELECT ss_store_sk, + ss_item_sk, + sum(ss_sales_price) AS revenue + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1176 AND 1176+11 + GROUP BY ss_store_sk, + ss_item_sk) sa + GROUP BY ss_store_sk) sb, + (SELECT ss_store_sk, + ss_item_sk, + sum(ss_sales_price) AS revenue + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1176 AND 1176+11 + GROUP BY ss_store_sk, + ss_item_sk) sc +WHERE sb.ss_store_sk = sc.ss_store_sk + AND sc.revenue <= 0.1 * sb.ave + AND s_store_sk = sc.ss_store_sk + AND i_item_sk = sc.ss_item_sk +ORDER BY s_store_name NULLS FIRST, + i_item_desc NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1176 AS BIGINT))", + "(d_month_seq <= CAST((1176 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_store_sk", + "ss_item_sk" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "ss_item_sk", + "revenue" + ] + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(revenue)" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "ave" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1176 AS BIGINT))", + "(d_month_seq <= CAST((1176 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_store_sk", + "ss_item_sk" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "ss_item_sk", + "revenue" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk = ss_store_sk)", + "(CAST(revenue AS DOUBLE) <= (CAST(0.1 AS DOUBLE) * ave))", + "(s_store_sk = ss_store_sk)", + "(i_item_sk = ss_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "i_item_desc", + "revenue", + "i_current_price", + "i_wholesale_cost", + "i_brand" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.store.s_store_name", + "memory.main.item.i_item_desc" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1176i64 <= $.d_month_seq <= 1187i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_store_sk", + "ss_item_sk" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "ss_item_sk", + "revenue" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288463" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1176i64 <= $.d_month_seq <= 1187i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_store_sk", + "ss_item_sk" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "revenue" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Groups": "ss_store_sk", + "Expressions": "avg(revenue)", + "Estimated Cardinality": "182343" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182343" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_store_sk", + "ave" + ], + "Estimated Cardinality": "182343" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "182343" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_store_sk = s_store_sk)", + "(CAST(revenue AS DOUBLE) <= (0.1 * ave))" + ], + "Estimated Cardinality": "12048087" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "i_item_desc", + "revenue", + "i_current_price", + "i_wholesale_cost", + "i_brand" + ], + "Estimated Cardinality": "12048087" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1176i64 <= $.d_month_seq <= 1187i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "ss_item_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288463" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1176i64 <= $.d_month_seq <= 1187i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "__internal_compress_integral_usmallint(#3, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "ss_item_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "revenue" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "ss_store_sk", + "revenue" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182343" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "182343" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_store_sk = s_store_sk", + "CAST(revenue AS DOUBLE) <= (0.1 * ave)" + ], + "Estimated Cardinality": "12048087" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name", + "i_item_desc", + "revenue", + "i_current_price", + "i_wholesale_cost", + "i_brand" + ], + "Estimated Cardinality": "12048087" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.store.s_store_name ASC", + "memory.main.item.i_item_desc ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q66.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q66.slt.no new file mode 100644 index 00000000000..fcf37b76ffe --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q66.slt.no @@ -0,0 +1,2888 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year_ + ,sum(jan_sales) as jan_sales + ,sum(feb_sales) as feb_sales + ,sum(mar_sales) as mar_sales + ,sum(apr_sales) as apr_sales + ,sum(may_sales) as may_sales + ,sum(jun_sales) as jun_sales + ,sum(jul_sales) as jul_sales + ,sum(aug_sales) as aug_sales + ,sum(sep_sales) as sep_sales + ,sum(oct_sales) as oct_sales + ,sum(nov_sales) as nov_sales + ,sum(dec_sales) as dec_sales + ,sum(jan_sales/w_warehouse_sq_ft) as jan_sales_per_sq_foot + ,sum(feb_sales/w_warehouse_sq_ft) as feb_sales_per_sq_foot + ,sum(mar_sales/w_warehouse_sq_ft) as mar_sales_per_sq_foot + ,sum(apr_sales/w_warehouse_sq_ft) as apr_sales_per_sq_foot + ,sum(may_sales/w_warehouse_sq_ft) as may_sales_per_sq_foot + ,sum(jun_sales/w_warehouse_sq_ft) as jun_sales_per_sq_foot + ,sum(jul_sales/w_warehouse_sq_ft) as jul_sales_per_sq_foot + ,sum(aug_sales/w_warehouse_sq_ft) as aug_sales_per_sq_foot + ,sum(sep_sales/w_warehouse_sq_ft) as sep_sales_per_sq_foot + ,sum(oct_sales/w_warehouse_sq_ft) as oct_sales_per_sq_foot + ,sum(nov_sales/w_warehouse_sq_ft) as nov_sales_per_sq_foot + ,sum(dec_sales/w_warehouse_sq_ft) as dec_sales_per_sq_foot + ,sum(jan_net) as jan_net + ,sum(feb_net) as feb_net + ,sum(mar_net) as mar_net + ,sum(apr_net) as apr_net + ,sum(may_net) as may_net + ,sum(jun_net) as jun_net + ,sum(jul_net) as jul_net + ,sum(aug_net) as aug_net + ,sum(sep_net) as sep_net + ,sum(oct_net) as oct_net + ,sum(nov_net) as nov_net + ,sum(dec_net) as dec_net + from ( + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DHL,BARIAN' as ship_carriers + ,d_year as year_ + ,sum(case when d_moy = 1 + then ws_ext_sales_price* ws_quantity else 0 end) as jan_sales + ,sum(case when d_moy = 2 + then ws_ext_sales_price* ws_quantity else 0 end) as feb_sales + ,sum(case when d_moy = 3 + then ws_ext_sales_price* ws_quantity else 0 end) as mar_sales + ,sum(case when d_moy = 4 + then ws_ext_sales_price* ws_quantity else 0 end) as apr_sales + ,sum(case when d_moy = 5 + then ws_ext_sales_price* ws_quantity else 0 end) as may_sales + ,sum(case when d_moy = 6 + then ws_ext_sales_price* ws_quantity else 0 end) as jun_sales + ,sum(case when d_moy = 7 + then ws_ext_sales_price* ws_quantity else 0 end) as jul_sales + ,sum(case when d_moy = 8 + then ws_ext_sales_price* ws_quantity else 0 end) as aug_sales + ,sum(case when d_moy = 9 + then ws_ext_sales_price* ws_quantity else 0 end) as sep_sales + ,sum(case when d_moy = 10 + then ws_ext_sales_price* ws_quantity else 0 end) as oct_sales + ,sum(case when d_moy = 11 + then ws_ext_sales_price* ws_quantity else 0 end) as nov_sales + ,sum(case when d_moy = 12 + then ws_ext_sales_price* ws_quantity else 0 end) as dec_sales + ,sum(case when d_moy = 1 + then ws_net_paid * ws_quantity else 0 end) as jan_net + ,sum(case when d_moy = 2 + then ws_net_paid * ws_quantity else 0 end) as feb_net + ,sum(case when d_moy = 3 + then ws_net_paid * ws_quantity else 0 end) as mar_net + ,sum(case when d_moy = 4 + then ws_net_paid * ws_quantity else 0 end) as apr_net + ,sum(case when d_moy = 5 + then ws_net_paid * ws_quantity else 0 end) as may_net + ,sum(case when d_moy = 6 + then ws_net_paid * ws_quantity else 0 end) as jun_net + ,sum(case when d_moy = 7 + then ws_net_paid * ws_quantity else 0 end) as jul_net + ,sum(case when d_moy = 8 + then ws_net_paid * ws_quantity else 0 end) as aug_net + ,sum(case when d_moy = 9 + then ws_net_paid * ws_quantity else 0 end) as sep_net + ,sum(case when d_moy = 10 + then ws_net_paid * ws_quantity else 0 end) as oct_net + ,sum(case when d_moy = 11 + then ws_net_paid * ws_quantity else 0 end) as nov_net + ,sum(case when d_moy = 12 + then ws_net_paid * ws_quantity else 0 end) as dec_net + from + web_sales + ,warehouse + ,date_dim + ,time_dim + ,ship_mode + where + ws_warehouse_sk = w_warehouse_sk + and ws_sold_date_sk = d_date_sk + and ws_sold_time_sk = t_time_sk + and ws_ship_mode_sk = sm_ship_mode_sk + and d_year = 2001 + and t_time between 30838 and 30838+28800 + and sm_carrier in ('DHL','BARIAN') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + union all + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DHL,BARIAN' as ship_carriers + ,d_year as year_ + ,sum(case when d_moy = 1 + then cs_sales_price* cs_quantity else 0 end) as jan_sales + ,sum(case when d_moy = 2 + then cs_sales_price* cs_quantity else 0 end) as feb_sales + ,sum(case when d_moy = 3 + then cs_sales_price* cs_quantity else 0 end) as mar_sales + ,sum(case when d_moy = 4 + then cs_sales_price* cs_quantity else 0 end) as apr_sales + ,sum(case when d_moy = 5 + then cs_sales_price* cs_quantity else 0 end) as may_sales + ,sum(case when d_moy = 6 + then cs_sales_price* cs_quantity else 0 end) as jun_sales + ,sum(case when d_moy = 7 + then cs_sales_price* cs_quantity else 0 end) as jul_sales + ,sum(case when d_moy = 8 + then cs_sales_price* cs_quantity else 0 end) as aug_sales + ,sum(case when d_moy = 9 + then cs_sales_price* cs_quantity else 0 end) as sep_sales + ,sum(case when d_moy = 10 + then cs_sales_price* cs_quantity else 0 end) as oct_sales + ,sum(case when d_moy = 11 + then cs_sales_price* cs_quantity else 0 end) as nov_sales + ,sum(case when d_moy = 12 + then cs_sales_price* cs_quantity else 0 end) as dec_sales + ,sum(case when d_moy = 1 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jan_net + ,sum(case when d_moy = 2 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as feb_net + ,sum(case when d_moy = 3 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as mar_net + ,sum(case when d_moy = 4 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as apr_net + ,sum(case when d_moy = 5 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as may_net + ,sum(case when d_moy = 6 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jun_net + ,sum(case when d_moy = 7 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as jul_net + ,sum(case when d_moy = 8 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as aug_net + ,sum(case when d_moy = 9 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as sep_net + ,sum(case when d_moy = 10 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as oct_net + ,sum(case when d_moy = 11 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as nov_net + ,sum(case when d_moy = 12 + then cs_net_paid_inc_tax * cs_quantity else 0 end) as dec_net + from + catalog_sales + ,warehouse + ,date_dim + ,time_dim + ,ship_mode + where + cs_warehouse_sk = w_warehouse_sk + and cs_sold_date_sk = d_date_sk + and cs_sold_time_sk = t_time_sk + and cs_ship_mode_sk = sm_ship_mode_sk + and d_year = 2001 + and t_time between 30838 AND 30838+28800 + and sm_carrier in ('DHL','BARIAN') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + ) x + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year_ + order by w_warehouse_name NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_ship_mode_id", + "sm_type", + "sm_code", + "sm_carrier", + "sm_contract" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_warehouse_sk = w_warehouse_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(ws_sold_time_sk = t_time_sk)", + "(ws_ship_mode_sk = sm_ship_mode_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(t_time >= CAST(30838 AS BIGINT))", + "(sm_carrier IN (CAST('DHL' AS VARCHAR), CAST('BARIAN' AS VARCHAR)))", + "(t_time <= CAST((30838 + 28800) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year" + ], + "Expressions": [ + "sum(CASE WHEN ((d_moy = CAST(1 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(2 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(3 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(4 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(5 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(6 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(7 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(8 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(9 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(10 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(11 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(12 AS BIGINT))) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(1 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(2 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(3 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(4 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(5 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(6 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(7 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(8 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(9 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(10 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(11 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(12 AS BIGINT))) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_ship_mode_id", + "sm_type", + "sm_code", + "sm_carrier", + "sm_contract" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_warehouse_sk = w_warehouse_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(cs_sold_time_sk = t_time_sk)", + "(cs_ship_mode_sk = sm_ship_mode_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(t_time >= CAST(30838 AS BIGINT))", + "(sm_carrier IN (CAST('DHL' AS VARCHAR), CAST('BARIAN' AS VARCHAR)))", + "(t_time <= CAST((30838 + 28800) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year" + ], + "Expressions": [ + "sum(CASE WHEN ((d_moy = CAST(1 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(2 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(3 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(4 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(5 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(6 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(7 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(8 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(9 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(10 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(11 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(12 AS BIGINT))) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(1 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(2 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(3 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(4 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(5 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(6 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(7 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(8 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(9 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(10 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(11 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)", + "sum(CASE WHEN ((d_moy = CAST(12 AS BIGINT))) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE CAST(0 AS DECIMAL(26,2)) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_" + ], + "Expressions": [ + "sum(jan_sales)", + "sum(feb_sales)", + "sum(mar_sales)", + "sum(apr_sales)", + "sum(may_sales)", + "sum(jun_sales)", + "sum(jul_sales)", + "sum(aug_sales)", + "sum(sep_sales)", + "sum(oct_sales)", + "sum(nov_sales)", + "sum(dec_sales)", + "sum((CAST(jan_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(feb_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(mar_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(apr_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(may_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(jun_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(jul_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(aug_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(sep_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(oct_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(nov_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum((CAST(dec_sales AS DOUBLE) / CAST(w_warehouse_sq_ft AS DOUBLE)))", + "sum(jan_net)", + "sum(feb_net)", + "sum(mar_net)", + "sum(apr_net)", + "sum(may_net)", + "sum(jun_net)", + "sum(jul_net)", + "sum(aug_net)", + "sum(sep_net)", + "sum(oct_net)", + "sum(nov_net)", + "sum(dec_net)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_sales_per_sq_foot", + "feb_sales_per_sq_foot", + "mar_sales_per_sq_foot", + "apr_sales_per_sq_foot", + "may_sales_per_sq_foot", + "jun_sales_per_sq_foot", + "jul_sales_per_sq_foot", + "aug_sales_per_sq_foot", + "sep_sales_per_sq_foot", + "oct_sales_per_sq_foot", + "nov_sales_per_sq_foot", + "dec_sales_per_sq_foot", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ] + } + } + ], + "extra_info": { + "Order By": "x.w_warehouse_name" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_quantity", + "ws_ext_sales_price", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(30838i64 <= $.t_time <= 59638i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"DHL\", \"BARIAN\"], $.sm_carrier)", + "Function": "Vortex Scan", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": "sm_ship_mode_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_mode_sk = sm_ship_mode_sk)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "(d_moy = 1)", + "ws_ext_sales_price", + "ws_quantity", + "(d_moy = 2)", + "(d_moy = 3)", + "(d_moy = 4)", + "(d_moy = 5)", + "(d_moy = 6)", + "(d_moy = 7)", + "(d_moy = 8)", + "(d_moy = 9)", + "(d_moy = 10)", + "(d_moy = 11)", + "(d_moy = 12)", + "ws_net_paid" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_utinyint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year" + ], + "Expressions": [ + "sum(CASE WHEN (#7) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#10) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#11) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#12) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#13) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#14) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#15) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#16) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#17) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#18) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#19) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#20) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#7) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#10) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#11) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#12) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#13) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#14) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#15) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#16) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#17) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#18) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#19) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#20) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_integral_bigint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_quantity", + "cs_sales_price", + "cs_net_paid_inc_tax" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(30838i64 <= $.t_time <= 59638i64)", + "(26i64 <= $.t_time_sk <= 86359i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"DHL\", \"BARIAN\"], $.sm_carrier)", + "Function": "Vortex Scan", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": "sm_ship_mode_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_mode_sk = sm_ship_mode_sk)", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "(d_moy = 1)", + "cs_sales_price", + "cs_quantity", + "(d_moy = 2)", + "(d_moy = 3)", + "(d_moy = 4)", + "(d_moy = 5)", + "(d_moy = 6)", + "(d_moy = 7)", + "(d_moy = 8)", + "(d_moy = 9)", + "(d_moy = 10)", + "(d_moy = 11)", + "(d_moy = 12)", + "cs_net_paid_inc_tax" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_utinyint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year" + ], + "Expressions": [ + "sum(CASE WHEN (#7) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#10) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#11) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#12) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#13) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#14) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#15) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#16) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#17) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#18) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#19) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#20) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#7) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#10) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#11) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#12) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#13) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#14) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#15) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#16) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#17) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#18) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#19) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)", + "sum(CASE WHEN (#20) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END)" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_integral_bigint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "CAST(w_warehouse_sq_ft AS DOUBLE)", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_string_uhugeint(#6)", + "__internal_compress_integral_utinyint(#7, 2001)", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30", + "#31", + "#32" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Groups": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_" + ], + "Expressions": [ + "sum(jan_sales)", + "sum(feb_sales)", + "sum(mar_sales)", + "sum(apr_sales)", + "sum(may_sales)", + "sum(jun_sales)", + "sum(jul_sales)", + "sum(aug_sales)", + "sum(sep_sales)", + "sum(oct_sales)", + "sum(nov_sales)", + "sum(dec_sales)", + "sum((CAST(jan_sales AS DOUBLE) / #20))", + "sum((CAST(feb_sales AS DOUBLE) / #20))", + "sum((CAST(mar_sales AS DOUBLE) / #20))", + "sum((CAST(apr_sales AS DOUBLE) / #20))", + "sum((CAST(may_sales AS DOUBLE) / #20))", + "sum((CAST(jun_sales AS DOUBLE) / #20))", + "sum((CAST(jul_sales AS DOUBLE) / #20))", + "sum((CAST(aug_sales AS DOUBLE) / #20))", + "sum((CAST(sep_sales AS DOUBLE) / #20))", + "sum((CAST(oct_sales AS DOUBLE) / #20))", + "sum((CAST(nov_sales AS DOUBLE) / #20))", + "sum((CAST(dec_sales AS DOUBLE) / #20))", + "sum(jan_net)", + "sum(feb_net)", + "sum(mar_net)", + "sum(apr_net)", + "sum(may_net)", + "sum(jun_net)", + "sum(jul_net)", + "sum(aug_net)", + "sum(sep_net)", + "sum(oct_net)", + "sum(nov_net)", + "sum(dec_net)" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_string(#6)", + "__internal_decompress_integral_bigint(#7, 2001)", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30", + "#31", + "#32", + "#33", + "#34", + "#35", + "#36", + "#37", + "#38", + "#39", + "#40", + "#41", + "#42", + "#43" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_sales_per_sq_foot", + "feb_sales_per_sq_foot", + "mar_sales_per_sq_foot", + "apr_sales_per_sq_foot", + "may_sales_per_sq_foot", + "jun_sales_per_sq_foot", + "jul_sales_per_sq_foot", + "aug_sales_per_sq_foot", + "sep_sales_per_sq_foot", + "oct_sales_per_sq_foot", + "nov_sales_per_sq_foot", + "dec_sales_per_sq_foot", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_quantity", + "ws_ext_sales_price", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(30838i64 <= $.t_time <= 59638i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Projections": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_time_sk = t_time_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"DHL\", \"BARIAN\"], $.sm_carrier)", + "Projections": "sm_ship_mode_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_mode_sk = sm_ship_mode_sk", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "(d_moy = 1)", + "ws_ext_sales_price", + "ws_quantity", + "(d_moy = 2)", + "(d_moy = 3)", + "(d_moy = 4)", + "(d_moy = 5)", + "(d_moy = 6)", + "(d_moy = 7)", + "(d_moy = 8)", + "(d_moy = 9)", + "(d_moy = 10)", + "(d_moy = 11)", + "(d_moy = 12)", + "ws_net_paid" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_utinyint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "CASE WHEN (#7) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#10) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#11) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#12) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#13) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#14) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#15) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#16) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#17) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#18) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#19) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#20) THEN ((CAST(ws_ext_sales_price AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#7) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#10) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#11) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#12) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#13) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#14) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#15) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#16) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#17) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#18) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#19) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#20) THEN ((CAST(ws_net_paid AS DECIMAL(26,2)) * CAST(ws_quantity AS DECIMAL(26,0)))) ELSE 0.00 END" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Aggregates": [ + "sum(#7)", + "sum(#8)", + "sum(#9)", + "sum(#10)", + "sum(#11)", + "sum(#12)", + "sum(#13)", + "sum(#14)", + "sum(#15)", + "sum(#16)", + "sum(#17)", + "sum(#18)", + "sum(#19)", + "sum(#20)", + "sum(#21)", + "sum(#22)", + "sum(#23)", + "sum(#24)", + "sum(#25)", + "sum(#26)", + "sum(#27)", + "sum(#28)", + "sum(#29)", + "sum(#30)" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_integral_bigint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_quantity", + "cs_sales_price", + "cs_net_paid_inc_tax" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": [ + "d_date_sk", + "d_year", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(30838i64 <= $.t_time <= 59638i64)", + "(26i64 <= $.t_time_sk <= 86359i64)" + ], + "Projections": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_time_sk = t_time_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"DHL\", \"BARIAN\"], $.sm_carrier)", + "Projections": "sm_ship_mode_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_mode_sk = sm_ship_mode_sk", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "(d_moy = 1)", + "cs_sales_price", + "cs_quantity", + "(d_moy = 2)", + "(d_moy = 3)", + "(d_moy = 4)", + "(d_moy = 5)", + "(d_moy = 6)", + "(d_moy = 7)", + "(d_moy = 8)", + "(d_moy = 9)", + "(d_moy = 10)", + "(d_moy = 11)", + "(d_moy = 12)", + "cs_net_paid_inc_tax" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_utinyint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "d_year", + "CASE WHEN (#7) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#10) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#11) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#12) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#13) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#14) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#15) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#16) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#17) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#18) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#19) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#20) THEN ((CAST(cs_sales_price AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#7) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#10) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#11) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#12) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#13) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#14) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#15) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#16) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#17) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#18) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#19) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END", + "CASE WHEN (#20) THEN ((CAST(cs_net_paid_inc_tax AS DECIMAL(26,2)) * CAST(cs_quantity AS DECIMAL(26,0)))) ELSE 0.00 END" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Aggregates": [ + "sum(#7)", + "sum(#8)", + "sum(#9)", + "sum(#10)", + "sum(#11)", + "sum(#12)", + "sum(#13)", + "sum(#14)", + "sum(#15)", + "sum(#16)", + "sum(#17)", + "sum(#18)", + "sum(#19)", + "sum(#20)", + "sum(#21)", + "sum(#22)", + "sum(#23)", + "sum(#24)", + "sum(#25)", + "sum(#26)", + "sum(#27)", + "sum(#28)", + "sum(#29)", + "sum(#30)" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_integral_bigint(#6, 2001)", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "CAST(w_warehouse_sq_ft AS DOUBLE)", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_string_uhugeint(#6)", + "__internal_compress_integral_utinyint(#7, 2001)", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30", + "#31", + "#32" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Projections": [ + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_city", + "w_county", + "w_state", + "w_country", + "ship_carriers", + "year_", + "jan_sales", + "feb_sales", + "mar_sales", + "apr_sales", + "may_sales", + "jun_sales", + "jul_sales", + "aug_sales", + "sep_sales", + "oct_sales", + "nov_sales", + "dec_sales", + "(CAST(jan_sales AS DOUBLE) / #20)", + "(CAST(feb_sales AS DOUBLE) / #20)", + "(CAST(mar_sales AS DOUBLE) / #20)", + "(CAST(apr_sales AS DOUBLE) / #20)", + "(CAST(may_sales AS DOUBLE) / #20)", + "(CAST(jun_sales AS DOUBLE) / #20)", + "(CAST(jul_sales AS DOUBLE) / #20)", + "(CAST(aug_sales AS DOUBLE) / #20)", + "(CAST(sep_sales AS DOUBLE) / #20)", + "(CAST(oct_sales AS DOUBLE) / #20)", + "(CAST(nov_sales AS DOUBLE) / #20)", + "(CAST(dec_sales AS DOUBLE) / #20)", + "jan_net", + "feb_net", + "mar_net", + "apr_net", + "may_net", + "jun_net", + "jul_net", + "aug_net", + "sep_net", + "oct_net", + "nov_net", + "dec_net" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": [ + "sum(#8)", + "sum(#9)", + "sum(#10)", + "sum(#11)", + "sum(#12)", + "sum(#13)", + "sum(#14)", + "sum(#15)", + "sum(#16)", + "sum(#17)", + "sum(#18)", + "sum(#19)", + "sum(#20)", + "sum(#21)", + "sum(#22)", + "sum(#23)", + "sum(#24)", + "sum(#25)", + "sum(#26)", + "sum(#27)", + "sum(#28)", + "sum(#29)", + "sum(#30)", + "sum(#31)", + "sum(#32)", + "sum(#33)", + "sum(#34)", + "sum(#35)", + "sum(#36)", + "sum(#37)", + "sum(#38)", + "sum(#39)", + "sum(#40)", + "sum(#41)", + "sum(#42)", + "sum(#43)" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 977787)", + "#2", + "#3", + "#4", + "#5", + "__internal_decompress_string(#6)", + "__internal_decompress_integral_bigint(#7, 2001)", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15", + "#16", + "#17", + "#18", + "#19", + "#20", + "#21", + "#22", + "#23", + "#24", + "#25", + "#26", + "#27", + "#28", + "#29", + "#30", + "#31", + "#32", + "#33", + "#34", + "#35", + "#36", + "#37", + "#38", + "#39", + "#40", + "#41", + "#42", + "#43" + ], + "Estimated Cardinality": "43045" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "x.w_warehouse_name ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q67.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q67.slt.no new file mode 100644 index 00000000000..26d2998e67f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q67.slt.no @@ -0,0 +1,796 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT i_category, + i_class, + i_brand, + i_product_name, + d_year, + d_qoy, + d_moy, + s_store_id, + sumsales, + rank() OVER (PARTITION BY i_category + ORDER BY sumsales DESC) rk + FROM + (SELECT i_category, + i_class, + i_brand, + i_product_name, + d_year, + d_qoy, + d_moy, + s_store_id, + sum(coalesce(ss_sales_price*ss_quantity,0)) sumsales + FROM store_sales, + date_dim, + store, + item + WHERE ss_sold_date_sk=d_date_sk + AND ss_item_sk=i_item_sk + AND ss_store_sk = s_store_sk + AND d_month_seq BETWEEN 1200 AND 1200+11 + GROUP BY rollup(i_category, i_class, i_brand, i_product_name, d_year, d_qoy, d_moy,s_store_id))dw1) dw2 +WHERE rk <= 100 +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_brand NULLS FIRST, + i_product_name NULLS FIRST, + d_year NULLS FIRST, + d_qoy NULLS FIRST, + d_moy NULLS FIRST, + s_store_id NULLS FIRST, + sumsales NULLS FIRST, + rk NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)", + "(ss_store_sk = s_store_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id" + ], + "Expressions": "sum(COALESCE((CAST(ss_sales_price AS DECIMAL(26,2)) * CAST(ss_quantity AS DECIMAL(26,0))), CAST(0 AS DECIMAL(26,2))))" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales" + ] + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY i_category ORDER BY sumsales DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales", + "rk" + ] + } + } + ], + "extra_info": { + "Expressions": "(rk <= CAST(100 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales", + "rk" + ] + } + } + ], + "extra_info": { + "Order By": [ + "dw2.i_category", + "dw2.i_class", + "dw2.i_brand", + "dw2.i_product_name", + "dw2.d_year", + "dw2.d_qoy", + "dw2.d_moy", + "dw2.s_store_id", + "dw2.sumsales", + "dw2.rk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_moy", + "d_qoy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id" + ], + "Expressions": "sum(COALESCE((CAST(ss_sales_price AS DECIMAL(26,2)) * CAST(ss_quantity AS DECIMAL(26,0))), 0.00))", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY i_category ORDER BY sumsales DESC NULLS LAST)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "(rk <= 100)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales", + "rk" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "sumsales", + "rk" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year", + "d_moy", + "d_qoy" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category", + "i_product_name" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_class", + "i_brand", + "i_product_name", + "d_year", + "d_qoy", + "d_moy", + "s_store_id", + "COALESCE((CAST(ss_sales_price AS DECIMAL(26,2)) * CAST(ss_quantity AS DECIMAL(26,0))), 0.00)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Aggregates": "sum(#8)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY i_category ORDER BY sumsales DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "(rk <= 100)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "dw2.i_category ASC", + "dw2.i_class ASC", + "dw2.i_brand ASC", + "dw2.i_product_name ASC", + "dw2.d_year ASC", + "dw2.d_qoy ASC", + "dw2.d_moy ASC", + "dw2.s_store_id ASC", + "dw2.sumsales ASC", + "dw2.rk ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q68.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q68.slt.no new file mode 100644 index 00000000000..2ed0c38e30d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q68.slt.no @@ -0,0 +1,1031 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_last_name, + c_first_name, + ca_city, + bought_city, + ss_ticket_number, + extended_price, + extended_tax, + list_price +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + ca_city bought_city, + sum(ss_ext_sales_price) extended_price, + sum(ss_ext_list_price) list_price, + sum(ss_ext_tax) extended_tax + FROM store_sales, + date_dim, + store, + household_demographics, + customer_address + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND store_sales.ss_addr_sk = customer_address.ca_address_sk + AND date_dim.d_dom BETWEEN 1 AND 2 + AND (household_demographics.hd_dep_count = 4 + OR household_demographics.hd_vehicle_count= 3) + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_city IN ('Fairview', + 'Midway') + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + ca_city) dn, + customer, + customer_address current_addr +WHERE ss_customer_sk = c_customer_sk + AND customer.c_current_addr_sk = current_addr.ca_address_sk + AND current_addr.ca_city <> bought_city +ORDER BY c_last_name NULLS FIRST, + ss_ticket_number NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_addr_sk = ca_address_sk)", + "(d_dom >= CAST(1 AS BIGINT))", + "((hd_dep_count = CAST(4 AS BIGINT)) OR (hd_vehicle_count = CAST(3 AS INTEGER)))", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(s_city IN (CAST('Fairview' AS VARCHAR), CAST('Midway' AS VARCHAR)))", + "(d_dom <= CAST(2 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city" + ], + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(ss_ext_list_price)", + "sum(ss_ext_tax)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "extended_price", + "list_price", + "extended_tax" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_customer_sk = c_customer_sk)", + "(c_current_addr_sk = ca_address_sk)", + "(ca_city != bought_city)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "extended_price", + "extended_tax", + "list_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name", + "dn.ss_ticket_number" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_ext_sales_price", + "ss_ext_list_price", + "ss_ext_tax" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(1i64 <= $.d_dom <= 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Fairview\", \"Midway\"], $.s_city)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(($.hd_dep_count = 4i64) or ($.hd_vehicle_count = 3i32))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_addr_sk = ca_address_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city" + ], + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(ss_ext_list_price)", + "sum(ss_ext_tax)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "extended_price", + "list_price", + "extended_tax" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ss_customer_sk = c_customer_sk)", + "(bought_city != ca_city)" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "extended_price", + "extended_tax", + "list_price" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_ext_sales_price", + "ss_ext_list_price", + "ss_ext_tax" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(1i64 <= $.d_dom <= 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Fairview\", \"Midway\"], $.s_city)", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(($.hd_dep_count = 4i64) or ($.hd_vehicle_count = 3i32))", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_addr_sk = ca_address_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "ca_city", + "ss_ext_sales_price", + "ss_ext_list_price", + "ss_ext_tax" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)", + "sum(#6)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "bought_city", + "extended_price", + "list_price", + "extended_tax" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_city" + ], + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ss_customer_sk = c_customer_sk", + "bought_city != ca_city" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "ca_city", + "bought_city", + "ss_ticket_number", + "extended_price", + "extended_tax", + "list_price" + ], + "Estimated Cardinality": "4932665" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer.c_last_name ASC", + "dn.ss_ticket_number ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q69.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q69.slt.no new file mode 100644 index 00000000000..1fc291edc40 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q69.slt.no @@ -0,0 +1,1683 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3 +FROM customer c, + customer_address ca, + customer_demographics +WHERE c.c_current_addr_sk = ca.ca_address_sk + AND ca_state IN ('KY', + 'GA', + 'NM') + AND cd_demo_sk = c.c_current_cdemo_sk + AND EXISTS + (SELECT * + FROM store_sales, + date_dim + WHERE c.c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2) + AND (NOT EXISTS + (SELECT * + FROM web_sales, + date_dim + WHERE c.c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2) + AND NOT EXISTS + (SELECT * + FROM catalog_sales, + date_dim + WHERE c.c_customer_sk = cs_ship_customer_sk + AND cs_sold_date_sk = d_date_sk + AND d_year = 2001 + AND d_moy BETWEEN 4 AND 4+2)) +GROUP BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating +ORDER BY cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy >= CAST(4 AS BIGINT))", + "(d_moy <= CAST((4 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy >= CAST(4 AS BIGINT))", + "(d_moy <= CAST((4 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = cs_ship_customer_sk)", + "(cs_sold_date_sk = d_date_sk)", + "(d_year = CAST(2001 AS BIGINT))", + "(d_moy >= CAST(4 AS BIGINT))", + "(d_moy <= CAST((4 + 2) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit", + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_current_addr_sk = ca_address_sk)", + "(ca_state IN (CAST('KY' AS VARCHAR), CAST('GA' AS VARCHAR), CAST('NM' AS VARCHAR)))", + "(cd_demo_sk = c_current_cdemo_sk)", + "SUBQUERY", + "(NOT SUBQUERY)", + "(NOT SUBQUERY)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating" + ], + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer_demographics.cd_gender", + "memory.main.customer_demographics.cd_marital_status", + "memory.main.customer_demographics.cd_education_status", + "memory.main.customer_demographics.cd_purchase_estimate", + "memory.main.customer_demographics.cd_credit_rating" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"KY\", \"GA\", \"NM\"], $.ca_state)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "192080" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(4i64 <= $.d_moy <= 6i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(4i64 <= $.d_moy <= 6i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "7683" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2001i64)", + "(4i64 <= $.d_moy <= 6i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "5361" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_customer_sk = c_customer_sk)", + "Estimated Cardinality": "15398" + } + } + ], + "extra_info": { + "Expressions": "c_customer_sk", + "Estimated Cardinality": "15398" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "(c_customer_sk IS NOT DISTINCT FROM c_customer_sk)", + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 500)", + "#4" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Groups": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating" + ], + "Expressions": "count_star()", + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 500)", + "#4", + "#5" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"KY\", \"GA\", \"NM\"], $.ca_state)", + "Projections": "ca_address_sk", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "38416" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "57671" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "9999" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "38416", + "Delim Index": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "7683" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "2", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "14014" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "7683" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "9785" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "7683", + "Delim Index": "2" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "1536" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ship_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2001", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "3", + "Estimated Cardinality": "5361" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_customer_sk = c_customer_sk", + "Estimated Cardinality": "15398" + } + } + ], + "extra_info": { + "Projections": "c_customer_sk", + "Estimated Cardinality": "15398" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "1536" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#5", + "Aggregates": "", + "Estimated Cardinality": "5361" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "c_customer_sk IS NOT DISTINCT FROM c_customer_sk", + "Estimated Cardinality": "1536", + "Delim Index": "3" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 500)", + "#4" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Projections": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "count_star()", + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 500)", + "#4", + "#5" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Projections": [ + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cnt1", + "cd_purchase_estimate", + "cnt2", + "cd_credit_rating", + "cnt3" + ], + "Estimated Cardinality": "1536" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer_demographics.cd_gender ASC", + "memory.main.customer_demographics.cd_marital_status ASC", + "memory.main.customer_demographics.cd_education_status ASC", + "memory.main.customer_demographics.cd_purchase_estimate ASC", + "memory.main.customer_demographics.cd_credit_rating ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q7.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q7.slt.no new file mode 100644 index 00000000000..576452d5c9d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q7.slt.no @@ -0,0 +1,694 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id, + avg(ss_quantity) agg1, + avg(ss_list_price) agg2, + avg(ss_coupon_amt) agg3, + avg(ss_sales_price) agg4 +FROM store_sales, + customer_demographics, + date_dim, + item, + promotion +WHERE ss_sold_date_sk = d_date_sk + AND ss_item_sk = i_item_sk + AND ss_cdemo_sk = cd_demo_sk + AND ss_promo_sk = p_promo_sk + AND cd_gender = 'M' + AND cd_marital_status = 'S' + AND cd_education_status = 'College' + AND (p_channel_email = 'N' + OR p_channel_event = 'N') + AND d_year = 2000 +GROUP BY i_item_id +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)", + "(ss_cdemo_sk = cd_demo_sk)", + "(ss_promo_sk = p_promo_sk)", + "(cd_gender = CAST('M' AS VARCHAR))", + "(cd_marital_status = CAST('S' AS VARCHAR))", + "(cd_education_status = CAST('College' AS VARCHAR))", + "((p_channel_email = CAST('N' AS VARCHAR)) OR (p_channel_event = CAST('N' AS VARCHAR)))", + "(d_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(ss_quantity)", + "avg(ss_list_price)", + "avg(ss_coupon_amt)", + "avg(ss_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "agg1", + "agg2", + "agg3", + "agg4" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.item.i_item_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_cdemo_sk", + "ss_promo_sk", + "ss_quantity", + "ss_list_price", + "ss_sales_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cd_gender = \"M\")", + "($.cd_marital_status = \"S\")", + "($.cd_education_status = \"College\")", + "(2i64 <= $.cd_demo_sk <= 192076i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "11535" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(($.p_channel_email = \"N\") or ($.p_channel_event = \"N\"))", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_promo_sk = p_promo_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": [ + "avg(ss_quantity)", + "avg(ss_list_price)", + "avg(ss_coupon_amt)", + "avg(ss_sales_price)" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "agg1", + "agg2", + "agg3", + "agg4" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_cdemo_sk", + "ss_promo_sk", + "ss_quantity", + "ss_list_price", + "ss_sales_price", + "ss_coupon_amt" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "cd_gender='M'", + "cd_marital_status='S'", + "cd_education_status='College'" + ], + "Projections": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "11535" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(($.p_channel_email = \"N\") or ($.p_channel_event = \"N\"))", + "Projections": "p_promo_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_promo_sk = p_promo_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 1)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "ss_quantity", + "ss_list_price", + "ss_coupon_amt", + "ss_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "avg(#1)", + "avg(#2)", + "avg(#3)", + "avg(#4)" + ], + "Estimated Cardinality": "11307" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.item.i_item_id ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q70.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q70.slt.no new file mode 100644 index 00000000000..bf3fb8a0b84 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q70.slt.no @@ -0,0 +1,1103 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT sum(ss_net_profit) AS total_sum, + s_state, + s_county, + grouping(s_state)+grouping(s_county) AS lochierarchy, + rank() OVER (PARTITION BY grouping(s_state)+grouping(s_county), + CASE + WHEN grouping(s_county) = 0 THEN s_state + END + ORDER BY sum(ss_net_profit) DESC) AS rank_within_parent +FROM store_sales, + date_dim d1, + store +WHERE d1.d_month_seq BETWEEN 1200 AND 1200+11 + AND d1.d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + AND s_state IN + (SELECT s_state + FROM + (SELECT s_state AS s_state, + rank() OVER (PARTITION BY s_state + ORDER BY sum(ss_net_profit) DESC) AS ranking + FROM store_sales, + store, + date_dim + WHERE d_month_seq BETWEEN 1200 AND 1200+11 + AND d_date_sk = ss_sold_date_sk + AND s_store_sk = ss_store_sk + GROUP BY s_state) tmp1 + WHERE ranking <= 5 ) +GROUP BY rollup(s_state,s_county) +ORDER BY lochierarchy DESC , + CASE + WHEN grouping(s_state)+grouping(s_county) = 0 THEN s_state + END , + rank_within_parent +LIMIT 100; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_date_sk = ss_sold_date_sk)", + "(s_store_sk = ss_store_sk)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "s_state", + "Expressions": "sum(ss_net_profit)" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY s_state ORDER BY sum(ss_net_profit) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "s_state", + "ranking" + ] + } + } + ], + "extra_info": { + "Expressions": "(ranking <= CAST(5 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": "s_state" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(s_state = #[54.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_date_sk = ss_sold_date_sk)", + "(s_store_sk = ss_store_sk)", + "SUBQUERY", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "s_state", + "s_county" + ], + "Expressions": "sum(ss_net_profit)" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY (GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)), CASE WHEN ((GROUPING(memory.main.store.s_county) = CAST(0 AS BIGINT))) THEN (s_state) ELSE CAST(NULL AS VARCHAR) END ORDER BY sum(ss_net_profit) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "total_sum", + "s_state", + "s_county", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)) = CAST(0 AS BIGINT))) THEN (s_state) ELSE CAST(NULL AS VARCHAR) END" + ] + } + } + ], + "extra_info": { + "Order By": [ + "(GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county))", + "#[21.5]", + "rank() OVER (PARTITION BY (GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)), CASE WHEN ((GROUPING(memory.main.store.s_county) = 0)) THEN (memory.main.store.s_state) ELSE NULL END ORDER BY sum(memory.main.store_sales.ss_net_profit) DESC)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[21.0]", + "#[21.1]", + "#[21.2]", + "#[21.3]", + "#[21.4]" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_county", + "s_state" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "s_state", + "Expressions": "sum(ss_net_profit)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY s_state ORDER BY sum(ss_net_profit) DESC NULLS LAST)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "(ranking <= 5)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "s_state", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": "s_state", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(s_state = #0)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "s_state", + "s_county" + ], + "Expressions": "sum(ss_net_profit)", + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY (GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)), CASE WHEN ((GROUPING(memory.main.store.s_county) = 0)) THEN (s_state) ELSE NULL END ORDER BY sum(ss_net_profit) DESC NULLS LAST)", + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Expressions": [ + "total_sum", + "s_state", + "s_county", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)) = 0)) THEN (s_state) ELSE NULL END" + ], + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_county", + "s_state" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_state" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "s_state", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY s_state ORDER BY sum(ss_net_profit) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expression": "(ranking <= 5)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "s_state = #0", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "s_state", + "s_county", + "ss_net_profit" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY (GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)), CASE WHEN ((GROUPING(memory.main.store.s_county) = 0)) THEN (s_state) ELSE NULL END ORDER BY sum(ss_net_profit) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Projections": [ + "total_sum", + "s_state", + "s_county", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)) = 0)) THEN (s_state) ELSE NULL END" + ], + "Estimated Cardinality": "57683" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "(GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)) DESC", + "#5 ASC", + "rank() OVER (PARTITION BY (GROUPING(memory.main.store.s_state) + GROUPING(memory.main.store.s_county)), CASE WHEN ((GROUPING(memory.main.store.s_county) = 0)) THEN (memory.main.store.s_state) ELSE NULL END ORDER BY sum(memory.main.store_sales.ss_net_profit) DESC) ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q71.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q71.slt.no new file mode 100644 index 00000000000..b0a4c7b6ff4 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q71.slt.no @@ -0,0 +1,1321 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_brand_id brand_id, + i_brand brand, + t_hour, + t_minute, + sum(ext_price) ext_price +FROM item, + (SELECT ws_ext_sales_price AS ext_price, + ws_sold_date_sk AS sold_date_sk, + ws_item_sk AS sold_item_sk, + ws_sold_time_sk AS time_sk + FROM web_sales, + date_dim + WHERE d_date_sk = ws_sold_date_sk + AND d_moy=11 + AND d_year=1999 + UNION ALL SELECT cs_ext_sales_price AS ext_price, + cs_sold_date_sk AS sold_date_sk, + cs_item_sk AS sold_item_sk, + cs_sold_time_sk AS time_sk + FROM catalog_sales, + date_dim + WHERE d_date_sk = cs_sold_date_sk + AND d_moy=11 + AND d_year=1999 + UNION ALL SELECT ss_ext_sales_price AS ext_price, + ss_sold_date_sk AS sold_date_sk, + ss_item_sk AS sold_item_sk, + ss_sold_time_sk AS time_sk + FROM store_sales, + date_dim + WHERE d_date_sk = ss_sold_date_sk + AND d_moy=11 + AND d_year=1999 ) tmp, + time_dim +WHERE sold_item_sk = i_item_sk + AND i_manager_id=1 + AND time_sk = t_time_sk + AND (t_meal_time = 'breakfast' + OR t_meal_time = 'dinner') +GROUP BY i_brand, + i_brand_id, + t_hour, + t_minute +ORDER BY ext_price DESC NULLS FIRST, + i_brand_id NULLS FIRST, + t_hour NULLS FIRST; +---- +logical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ws_sold_date_sk)", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_date_sk", + "sold_item_sk", + "time_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = cs_sold_date_sk)", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_date_sk", + "sold_item_sk", + "time_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date_sk = ss_sold_date_sk)", + "(d_moy = CAST(11 AS BIGINT))", + "(d_year = CAST(1999 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_date_sk", + "sold_item_sk", + "time_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(sold_item_sk = i_item_sk)", + "(i_manager_id = CAST(1 AS BIGINT))", + "(time_sk = t_time_sk)", + "((t_meal_time = CAST('breakfast' AS VARCHAR)) OR (t_meal_time = CAST('dinner' AS VARCHAR)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id", + "t_hour", + "t_minute" + ], + "Expressions": "sum(ext_price)" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "t_hour", + "t_minute", + "ext_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(tmp.ext_price)", + "memory.main.item.i_brand_id", + "memory.main.time_dim.t_hour" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 1999i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 1999i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_moy = 11i64)", + "($.d_year = 1999i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100722" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manager_id = 1i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sold_item_sk = i_item_sk)", + "Estimated Cardinality": "20144" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.t_meal_time = \"breakfast\") or ($.t_meal_time = \"dinner\"))", + "(26i64 <= $.t_time_sk <= 86359i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_hour", + "t_minute" + ], + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(time_sk = t_time_sk)", + "Estimated Cardinality": "20144" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2", + "#0", + "__internal_compress_integral_utinyint(#3, 0)", + "__internal_compress_integral_utinyint(#4, 0)" + ], + "Estimated Cardinality": "20144" + } + } + ], + "extra_info": { + "Groups": [ + "i_brand", + "i_brand_id", + "t_hour", + "t_minute" + ], + "Expressions": "sum(ext_price)", + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 0)", + "__internal_decompress_integral_bigint(#3, 0)", + "#4" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Expressions": [ + "brand_id", + "brand", + "t_hour", + "t_minute", + "ext_price" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "#1", + "__internal_compress_integral_utinyint(#2, 0)", + "__internal_compress_integral_utinyint(#3, 0)", + "#4" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Order By": [ + "sum(tmp.ext_price)", + "memory.main.item.i_brand_id", + "memory.main.time_dim.t_hour" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "#1", + "__internal_decompress_integral_bigint(#2, 0)", + "__internal_decompress_integral_bigint(#3, 0)", + "#4" + ] + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1999", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + } + ], + "extra_info": { + "Projections": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "14322" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1999", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28723" + } + } + ], + "extra_info": { + "Projections": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "28723" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1999", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "ext_price", + "sold_item_sk", + "time_sk" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": {} + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manager_id=1", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_brand" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sold_item_sk = i_item_sk", + "Estimated Cardinality": "20144" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.t_meal_time = \"breakfast\") or ($.t_meal_time = \"dinner\"))", + "(26i64 <= $.t_time_sk <= 86359i64)" + ], + "Projections": [ + "t_time_sk", + "t_hour", + "t_minute" + ], + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "time_sk = t_time_sk", + "Estimated Cardinality": "20144" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_uinteger(#1, 1001001)", + "#2", + "#0", + "__internal_compress_integral_utinyint(#3, 0)", + "__internal_compress_integral_utinyint(#4, 0)" + ], + "Estimated Cardinality": "20144" + } + } + ], + "extra_info": { + "Projections": [ + "i_brand", + "i_brand_id", + "t_hour", + "t_minute", + "ext_price" + ], + "Estimated Cardinality": "20144" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": "sum(#4)", + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 0)", + "__internal_decompress_integral_bigint(#3, 0)", + "#4" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Projections": [ + "brand_id", + "brand", + "t_hour", + "t_minute", + "ext_price" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_uinteger(#0, 1001001)", + "#1", + "__internal_compress_integral_utinyint(#2, 0)", + "__internal_compress_integral_utinyint(#3, 0)", + "#4" + ], + "Estimated Cardinality": "20143" + } + } + ], + "extra_info": { + "Order By": [ + "sum(tmp.ext_price) DESC", + "memory.main.item.i_brand_id ASC", + "memory.main.time_dim.t_hour ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1001001)", + "#1", + "__internal_decompress_integral_bigint(#2, 0)", + "__internal_decompress_integral_bigint(#3, 0)", + "#4" + ], + "Estimated Cardinality": "0" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q72.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q72.slt.no new file mode 100644 index 00000000000..e505e80bb53 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q72.slt.no @@ -0,0 +1,1360 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_desc, + w_warehouse_name, + d1.d_week_seq, + sum(CASE + WHEN p_promo_sk IS NULL THEN 1 + ELSE 0 + END) no_promo, + sum(CASE + WHEN p_promo_sk IS NOT NULL THEN 1 + ELSE 0 + END) promo, + count(*) total_cnt +FROM catalog_sales +JOIN inventory ON (cs_item_sk = inv_item_sk) +JOIN warehouse ON (w_warehouse_sk=inv_warehouse_sk) +JOIN item ON (i_item_sk = cs_item_sk) +JOIN customer_demographics ON (cs_bill_cdemo_sk = cd_demo_sk) +JOIN household_demographics ON (cs_bill_hdemo_sk = hd_demo_sk) +JOIN date_dim d1 ON (cs_sold_date_sk = d1.d_date_sk) +JOIN date_dim d2 ON (inv_date_sk = d2.d_date_sk) +JOIN date_dim d3 ON (cs_ship_date_sk = d3.d_date_sk) +LEFT OUTER JOIN promotion ON (cs_promo_sk=p_promo_sk) +LEFT OUTER JOIN catalog_returns ON (cr_item_sk = cs_item_sk + AND cr_order_number = cs_order_number) +WHERE d1.d_week_seq = d2.d_week_seq + AND inv_quantity_on_hand < cs_quantity + AND d3.d_date > (d1.d_date + INTERVAL '5' DAY) + AND hd_buy_potential = '>10000' + AND d1.d_year = 1999 + AND cd_marital_status = 'D' +GROUP BY i_item_desc, + w_warehouse_name, + d1.d_week_seq +ORDER BY total_cnt DESC NULLS FIRST, + i_item_desc NULLS FIRST, + w_warehouse_name NULLS FIRST, + d1.d_week_seq NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = inv_item_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_warehouse_sk = w_warehouse_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_cdemo_sk = cd_demo_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_hdemo_sk = hd_demo_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(cs_promo_sk = p_promo_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(d_week_seq = d_week_seq)", + "(CAST(inv_quantity_on_hand AS BIGINT) < cs_quantity)", + "(CAST(d_date AS TIMESTAMP) > (d_date + to_days(CAST(trunc(CAST('5' AS DOUBLE)) AS INTEGER))))", + "(hd_buy_potential = CAST('>10000' AS VARCHAR))", + "(d_year = CAST(1999 AS BIGINT))", + "(cd_marital_status = CAST('D' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_desc", + "w_warehouse_name", + "d_week_seq" + ], + "Expressions": [ + "sum(CASE WHEN ((p_promo_sk IS NULL)) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((p_promo_sk IS NOT NULL)) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_desc", + "w_warehouse_name", + "d_week_seq", + "no_promo", + "promo", + "total_cnt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "count_star()", + "memory.main.item.i_item_desc", + "memory.main.warehouse.w_warehouse_name", + "d1.d_week_seq" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "234900" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450815i64 <= $.d_date_sk <= 2452635i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1999i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_week_seq = d_week_seq)", + "Estimated Cardinality": "14605" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "46967" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "46967" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450817i64 <= $.d_date_sk <= 2452740i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ship_date_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.cd_marital_status = \"D\")", + "($.cd_demo_sk >= 16i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_cdemo_sk = cd_demo_sk)", + "Estimated Cardinality": "28730" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.hd_buy_potential = \">10000\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "5746" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "5746" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = cs_ship_date_sk)", + "Estimated Cardinality": "5746" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(d_date_sk = cs_sold_date_sk)", + "(inv_item_sk = i_item_sk)", + "((d_date + '5 days'::INTERVAL) < CAST(d_date AS TIMESTAMP))", + "(CAST(inv_quantity_on_hand AS BIGINT) < cs_quantity)" + ], + "Estimated Cardinality": "2405240" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(cs_promo_sk = p_promo_sk)", + "Estimated Cardinality": "2405240" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Expressions": [ + "#2", + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_usmallint(#5, 2)" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_desc", + "w_warehouse_name", + "d_week_seq" + ], + "Expressions": [ + "sum(CASE WHEN ((p_promo_sk IS NULL)) THEN (1) ELSE 0 END)", + "sum(CASE WHEN ((p_promo_sk IS NOT NULL)) THEN (1) ELSE 0 END)", + "count_star()" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_desc", + "w_warehouse_name", + "d_week_seq", + "no_promo", + "promo", + "total_cnt" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ], + "Estimated Cardinality": "234900" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450815i64 <= $.d_date_sk <= 2452635i64)", + "Projections": [ + "d_date_sk", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=1999", + "Projections": [ + "d_date_sk", + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_week_seq = d_week_seq", + "Estimated Cardinality": "14605" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "46967" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "46967" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450817i64 <= $.d_date_sk <= 2452740i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ship_date_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "cd_marital_status='D'", + "Projections": "cd_demo_sk", + "Estimated Cardinality": "7683" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_cdemo_sk = cd_demo_sk", + "Estimated Cardinality": "28730" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "hd_buy_potential='>10000'", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "5746" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_desc" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "5746" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = cs_ship_date_sk", + "Estimated Cardinality": "5746" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "d_date_sk = cs_sold_date_sk", + "inv_item_sk = i_item_sk", + "(d_date + '5 days'::INTERVAL) < CAST(d_date AS TIMESTAMP)", + "CAST(inv_quantity_on_hand AS BIGINT) < cs_quantity" + ], + "Estimated Cardinality": "2405240" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "p_promo_sk", + "Estimated Cardinality": "30" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "cs_promo_sk = p_promo_sk", + "Estimated Cardinality": "2405240" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "cs_item_sk = cr_item_sk", + "cs_order_number = cr_order_number" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Projections": [ + "#2", + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_usmallint(#5, 2)" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_desc", + "w_warehouse_name", + "d_week_seq", + "CASE WHEN ((p_promo_sk IS NULL)) THEN (1) ELSE 0 END", + "CASE WHEN ((p_promo_sk IS NOT NULL)) THEN (1) ELSE 0 END" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "count_star()" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "2405240" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "count_star() DESC", + "memory.main.item.i_item_desc ASC", + "memory.main.warehouse.w_warehouse_name ASC", + "d1.d_week_seq ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q73.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q73.slt.no new file mode 100644 index 00000000000..45d85d20b43 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q73.slt.no @@ -0,0 +1,881 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_last_name, + c_first_name, + c_salutation, + c_preferred_cust_flag, + ss_ticket_number, + cnt +FROM + (SELECT ss_ticket_number, + ss_customer_sk, + count(*) cnt + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND date_dim.d_dom BETWEEN 1 AND 2 + AND (household_demographics.hd_buy_potential = 'Unknown' + OR household_demographics.hd_buy_potential = '>10000') + AND household_demographics.hd_vehicle_count > 0 + AND CASE + WHEN household_demographics.hd_vehicle_count > 0 THEN (household_demographics.hd_dep_count*1.000)/ household_demographics.hd_vehicle_count + ELSE NULL + END > 1 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_county IN ('Orange County', + 'Bronx County', + 'Franklin Parish', + 'Williamson County') + GROUP BY ss_ticket_number, + ss_customer_sk) dj, + customer +WHERE ss_customer_sk = c_customer_sk + AND cnt BETWEEN 1 AND 5 +ORDER BY cnt DESC, + c_last_name ASC; +---- +logical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(d_dom >= CAST(1 AS BIGINT))", + "((hd_buy_potential = CAST('Unknown' AS VARCHAR)) OR (hd_buy_potential = CAST('>10000' AS VARCHAR)))", + "(hd_vehicle_count > CAST(0 AS INTEGER))", + "(CASE WHEN ((hd_vehicle_count > CAST(0 AS INTEGER))) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * CAST(1.000 AS DECIMAL(23,3))) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END > CAST(1 AS DOUBLE))", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(s_county IN (CAST('Orange County' AS VARCHAR), CAST('Bronx County' AS VARCHAR), CAST('Franklin Parish' AS VARCHAR), CAST('Williamson County' AS VARCHAR)))", + "(d_dom <= CAST(2 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "cnt" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_customer_sk = c_customer_sk)", + "(cnt >= CAST(1 AS BIGINT))", + "(cnt <= CAST(5 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "dj.cnt", + "memory.main.customer.c_last_name" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(1i64 <= $.d_dom <= 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Orange County\", \"Bronx County\", \"Franklin Parish\", \"Williamson County\"], $.s_county)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.hd_buy_potential = \"Unknown\") or ($.hd_buy_potential = \">10000\"))", + "($.hd_vehicle_count > 0i32)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_dep_count", + "hd_vehicle_count" + ], + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((hd_vehicle_count > 0)) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * 1.000) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE NULL END > 1.0)", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Expressions": "count_star()", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": "(cnt BETWEEN 1 AND 5)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "cnt" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Order By": [ + "dj.cnt", + "memory.main.customer.c_last_name" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ] + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_store_sk", + "ss_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "(1i64 <= $.d_dom <= 2i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Orange County\", \"Bronx County\", \"Franklin Parish\", \"Williamson County\"], $.s_county)", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.hd_buy_potential = \"Unknown\") or ($.hd_buy_potential = \">10000\"))", + "($.hd_vehicle_count > 0i32)" + ], + "Projections": [ + "hd_demo_sk", + "hd_dep_count", + "hd_vehicle_count" + ], + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((hd_vehicle_count > 0)) THEN ((CAST((CAST(hd_dep_count AS DECIMAL(23,0)) * 1.000) AS DOUBLE) / CAST(hd_vehicle_count AS DOUBLE))) ELSE NULL END > 1.0)", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "count_star()", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "#2" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expression": "(cnt BETWEEN 1 AND 5)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "c_salutation", + "c_preferred_cust_flag", + "ss_ticket_number", + "cnt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_compress_integral_usmallint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Order By": [ + "dj.cnt DESC", + "memory.main.customer.c_last_name ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "__internal_decompress_integral_bigint(#4, 1)", + "#5" + ], + "Estimated Cardinality": "0" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q74.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q74.slt.no new file mode 100644 index 00000000000..a070cdcbb7e --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q74.slt.no @@ -0,0 +1,1548 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH year_total AS + (SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + d_year AS year_, + sum(ss_net_paid) year_total, + 's' sale_type + FROM customer, + store_sales, + date_dim + WHERE c_customer_sk = ss_customer_sk + AND ss_sold_date_sk = d_date_sk + AND d_year IN (2001, + 2001+1) + GROUP BY c_customer_id, + c_first_name, + c_last_name, + d_year + UNION ALL SELECT c_customer_id customer_id, + c_first_name customer_first_name, + c_last_name customer_last_name, + d_year AS year_, + sum(ws_net_paid) year_total, + 'w' sale_type + FROM customer, + web_sales, + date_dim + WHERE c_customer_sk = ws_bill_customer_sk + AND ws_sold_date_sk = d_date_sk + AND d_year IN (2001, + 2001+1) + GROUP BY c_customer_id, + c_first_name, + c_last_name, + d_year) +SELECT t_s_secyear.customer_id, + t_s_secyear.customer_first_name, + t_s_secyear.customer_last_name +FROM year_total t_s_firstyear, + year_total t_s_secyear, + year_total t_w_firstyear, + year_total t_w_secyear +WHERE t_s_secyear.customer_id = t_s_firstyear.customer_id + AND t_s_firstyear.customer_id = t_w_secyear.customer_id + AND t_s_firstyear.customer_id = t_w_firstyear.customer_id + AND t_s_firstyear.sale_type = 's' + AND t_w_firstyear.sale_type = 'w' + AND t_s_secyear.sale_type = 's' + AND t_w_secyear.sale_type = 'w' + AND t_s_firstyear.year_ = 2001 + AND t_s_secyear.year_ = 2001+1 + AND t_w_firstyear.year_ = 2001 + AND t_w_secyear.year_ = 2001+1 + AND t_s_firstyear.year_total > 0 + AND t_w_firstyear.year_total > 0 + AND CASE + WHEN t_w_firstyear.year_total > 0 THEN t_w_secyear.year_total / t_w_firstyear.year_total + ELSE NULL + END > CASE + WHEN t_s_firstyear.year_total > 0 THEN t_s_secyear.year_total / t_s_firstyear.year_total + ELSE NULL + END +ORDER BY 1 NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ss_customer_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_year IN (CAST(2001 AS BIGINT), CAST((2001 + 1) AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year" + ], + "Expressions": "sum(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(c_customer_sk = ws_bill_customer_sk)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year IN (CAST(2001 AS BIGINT), CAST((2001 + 1) AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year" + ], + "Expressions": "sum(ws_net_paid)" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(customer_id = customer_id)", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(sale_type = CAST('s' AS VARCHAR))", + "(sale_type = CAST('w' AS VARCHAR))", + "(year_ = CAST(2001 AS BIGINT))", + "(year_ = CAST((2001 + 1) AS BIGINT))", + "(year_ = CAST(2001 AS BIGINT))", + "(year_ = CAST((2001 + 1) AS BIGINT))", + "(year_total > CAST(0 AS DECIMAL(38,2)))", + "(year_total > CAST(0 AS DECIMAL(38,2)))", + "(CASE WHEN ((year_total > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END > CASE WHEN ((year_total > CAST(0 AS DECIMAL(38,2)))) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE CAST(NULL AS DOUBLE) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name" + ] + } + } + ], + "extra_info": { + "Order By": "customer_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_net_paid" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([2001i64, 2002i64], $.d_year)", + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year" + ], + "Expressions": "sum(ss_net_paid)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "#4" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": "((year_ = 2002) OR ((year_ = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([2001i64, 2002i64], $.d_year)", + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year" + ], + "Expressions": "sum(ws_net_paid)", + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "#4" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": "((year_ = 2002) OR ((year_ = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ] + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(year_ = 2001)", + "(year_total > 0.00)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(year_ = 2002)", + "(sale_type = 's')" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "518659" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(year_ = 2001)", + "(year_total > 0.00)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expressions": [ + "(year_ = 2002)", + "(sale_type = 'w')" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(customer_id = customer_id)", + "Estimated Cardinality": "518659" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(customer_id = customer_id)", + "(CASE WHEN ((year_total > 0.00)) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE NULL END < CASE WHEN ((year_total > 0.00)) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE NULL END)" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customer_first_name", + "customer_last_name" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_net_paid" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([2001i64, 2002i64], $.d_year)", + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year", + "ss_net_paid" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": "sum(#4)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "#4" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2002) OR ((year_ = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([2001i64, 2002i64], $.d_year)", + "(($.d_year = 2001i64) or ($.d_year = 2002i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1900)", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_customer_id", + "c_first_name", + "c_last_name", + "d_year", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": "sum(#4)", + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "__internal_decompress_integral_bigint(#3, 1900)", + "#4" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2002) OR ((year_ = 2001) AND (year_total > 0.00)))", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customer_first_name", + "customer_last_name", + "year_", + "year_total", + "sale_type" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": {} + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2001) AND (year_total > 0.00) AND (sale_type = 's'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#4" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2002) AND (sale_type = 's'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#4" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "518659" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2001) AND (year_total > 0.00) AND (sale_type = 'w'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#4" + ], + "Estimated Cardinality": "72018" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Expression": "((year_ = 2002) AND (sale_type = 'w'))", + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#4" + ], + "Estimated Cardinality": "72018" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "customer_id = customer_id", + "Estimated Cardinality": "518659" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "customer_id = customer_id", + "CASE WHEN ((year_total > 0.00)) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE NULL END < CASE WHEN ((year_total > 0.00)) THEN ((CAST(year_total AS DOUBLE) / CAST(year_total AS DOUBLE))) ELSE NULL END" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "57955887304299528" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "customer_id ASC" + } + } + ], + "extra_info": { + "CTE Name": "year_total", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q75.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q75.slt.no new file mode 100644 index 00000000000..d4cb80e12f1 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q75.slt.no @@ -0,0 +1,2177 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH all_sales AS + ( SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + SUM(sales_cnt) AS sales_cnt , + SUM(sales_amt) AS sales_amt + FROM + (SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + cs_quantity - COALESCE(cr_return_quantity,0) AS sales_cnt , + cs_ext_sales_price - COALESCE(cr_return_amount,0.0) AS sales_amt + FROM catalog_sales + JOIN item ON i_item_sk=cs_item_sk + JOIN date_dim ON d_date_sk=cs_sold_date_sk + LEFT JOIN catalog_returns ON (cs_order_number=cr_order_number + AND cs_item_sk=cr_item_sk) + WHERE i_category='Books' + UNION SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + ss_quantity - COALESCE(sr_return_quantity,0) AS sales_cnt , + ss_ext_sales_price - COALESCE(sr_return_amt,0.0) AS sales_amt + FROM store_sales + JOIN item ON i_item_sk=ss_item_sk + JOIN date_dim ON d_date_sk=ss_sold_date_sk + LEFT JOIN store_returns ON (ss_ticket_number=sr_ticket_number + AND ss_item_sk=sr_item_sk) + WHERE i_category='Books' + UNION SELECT d_year , + i_brand_id , + i_class_id , + i_category_id , + i_manufact_id , + ws_quantity - COALESCE(wr_return_quantity,0) AS sales_cnt , + ws_ext_sales_price - COALESCE(wr_return_amt,0.0) AS sales_amt + FROM web_sales + JOIN item ON i_item_sk=ws_item_sk + JOIN date_dim ON d_date_sk=ws_sold_date_sk + LEFT JOIN web_returns ON (ws_order_number=wr_order_number + AND ws_item_sk=wr_item_sk) + WHERE i_category='Books') sales_detail + GROUP BY d_year, + i_brand_id, + i_class_id, + i_category_id, + i_manufact_id) +SELECT prev_yr.d_year AS prev_year , + curr_yr.d_year AS year_ , + curr_yr.i_brand_id , + curr_yr.i_class_id , + curr_yr.i_category_id , + curr_yr.i_manufact_id , + prev_yr.sales_cnt AS prev_yr_cnt , + curr_yr.sales_cnt AS curr_yr_cnt , + curr_yr.sales_cnt-prev_yr.sales_cnt AS sales_cnt_diff , + curr_yr.sales_amt-prev_yr.sales_amt AS sales_amt_diff +FROM all_sales curr_yr, + all_sales prev_yr +WHERE curr_yr.i_brand_id=prev_yr.i_brand_id + AND curr_yr.i_class_id=prev_yr.i_class_id + AND curr_yr.i_category_id=prev_yr.i_category_id + AND curr_yr.i_manufact_id=prev_yr.i_manufact_id + AND curr_yr.d_year=2002 + AND prev_yr.d_year=2002-1 + AND CAST(curr_yr.sales_cnt AS DECIMAL(17,2))/CAST(prev_yr.sales_cnt AS DECIMAL(17,2))<0.9 +ORDER BY sales_cnt_diff, + sales_amt_diff +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Books' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Books' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": "(i_category = CAST('Books' AS VARCHAR))" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Expressions": [ + "sum(sales_cnt)", + "sum(sales_amt)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_brand_id = i_brand_id)", + "(i_class_id = i_class_id)", + "(i_category_id = i_category_id)", + "(i_manufact_id = i_manufact_id)", + "(d_year = CAST(2002 AS BIGINT))", + "(d_year = CAST((2002 - 1) AS BIGINT))", + "((CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE) / CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE)) < CAST(0.9 AS DOUBLE))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "prev_year", + "year_", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "prev_yr_cnt", + "curr_yr_cnt", + "sales_cnt_diff", + "sales_amt_diff" + ] + } + } + ], + "extra_info": { + "Order By": [ + "(curr_yr.sales_cnt - prev_yr.sales_cnt)", + "(curr_yr.sales_amt - prev_yr.sales_amt)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "all_sales", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Books\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ], + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ticket_number", + "ss_quantity", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Books\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_order_number", + "ws_quantity", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_category = \"Books\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_item_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1900)", + "__internal_compress_integral_uinteger(#1, 1001001)", + "__internal_compress_integral_utinyint(#2, 1)", + "__internal_compress_integral_utinyint(#3, 1)", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_utinyint(#5, -99)", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "57692", + "Distinct Targets": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "__internal_decompress_integral_bigint(#4, 1)", + "__internal_decompress_integral_bigint(#5, -99)", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1900)", + "__internal_compress_integral_uinteger(#1, 1001001)", + "__internal_compress_integral_utinyint(#2, 1)", + "__internal_compress_integral_utinyint(#3, 1)", + "__internal_compress_integral_usmallint(#4, 1)", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Expressions": [ + "sum(sales_cnt)", + "sum(sales_amt)" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "__internal_decompress_integral_bigint(#4, 1)", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "(d_year = 2002)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "(d_year = 2001)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(i_brand_id = i_brand_id)", + "(i_class_id = i_class_id)", + "(i_category_id = i_category_id)", + "(i_manufact_id = i_manufact_id)" + ], + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Expressions": "((CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE) / CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE)) < 0.9)", + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Expressions": [ + "prev_year", + "year_", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "prev_yr_cnt", + "curr_yr_cnt", + "sales_cnt_diff", + "sales_amt_diff" + ], + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "all_sales", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Books'", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "cs_order_number = cr_order_number", + "cs_item_sk = cr_item_sk" + ], + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ticket_number", + "ss_quantity", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Books'", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_ticket_number = sr_ticket_number", + "ss_item_sk = sr_item_sk" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_order_number", + "ws_quantity", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_category='Books'", + "Projections": [ + "i_item_sk", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id" + ], + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(($.d_year = 2002i64) or ($.d_year = 2001i64))", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_item_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ws_order_number = wr_order_number", + "ws_item_sk = wr_item_sk" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Aggregates": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1900)", + "__internal_compress_integral_uinteger(#1, 1001001)", + "__internal_compress_integral_utinyint(#2, 1)", + "__internal_compress_integral_utinyint(#3, 1)", + "__internal_compress_integral_usmallint(#4, 1)", + "__internal_compress_integral_utinyint(#5, -99)", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Aggregates": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "__internal_decompress_integral_bigint(#4, 1)", + "__internal_decompress_integral_bigint(#5, -99)", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1900)", + "__internal_compress_integral_uinteger(#1, 1001001)", + "__internal_compress_integral_utinyint(#2, 1)", + "__internal_compress_integral_utinyint(#3, 1)", + "__internal_compress_integral_usmallint(#4, 1)", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": [ + "sum(#5)", + "sum(#6)" + ], + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1900)", + "__internal_decompress_integral_bigint(#1, 1001001)", + "__internal_decompress_integral_bigint(#2, 1)", + "__internal_decompress_integral_bigint(#3, 1)", + "__internal_decompress_integral_bigint(#4, 1)", + "#5", + "#6" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expression": "(d_year = 2002)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expression": "(d_year = 2001)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "i_brand_id = i_brand_id", + "i_class_id = i_class_id", + "i_category_id = i_category_id", + "i_manufact_id = i_manufact_id" + ], + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Expression": "((CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE) / CAST(CAST(sales_cnt AS DECIMAL(17,2)) AS DOUBLE)) < 0.9)", + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Projections": [ + "prev_year", + "year_", + "i_brand_id", + "i_class_id", + "i_category_id", + "i_manufact_id", + "prev_yr_cnt", + "curr_yr_cnt", + "sales_cnt_diff", + "sales_amt_diff" + ], + "Estimated Cardinality": "23168" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "(curr_yr.sales_cnt - prev_yr.sales_cnt) ASC", + "(curr_yr.sales_amt - prev_yr.sales_amt) ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "all_sales", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q76.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q76.slt.no new file mode 100644 index 00000000000..573437a6b87 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q76.slt.no @@ -0,0 +1,1361 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT channel, + col_name, + d_year, + d_qoy, + i_category, + COUNT(*) sales_cnt, + SUM(ext_sales_price) sales_amt +FROM + ( SELECT 'store' AS channel, + 'ss_store_sk' col_name, + d_year, + d_qoy, + i_category, + ss_ext_sales_price ext_sales_price + FROM store_sales, + item, + date_dim + WHERE ss_store_sk IS NULL + AND ss_sold_date_sk=d_date_sk + AND ss_item_sk=i_item_sk + UNION ALL SELECT 'web' AS channel, + 'ws_ship_customer_sk' col_name, + d_year, + d_qoy, + i_category, + ws_ext_sales_price ext_sales_price + FROM web_sales, + item, + date_dim + WHERE ws_ship_customer_sk IS NULL + AND ws_sold_date_sk=d_date_sk + AND ws_item_sk=i_item_sk + UNION ALL SELECT 'catalog' AS channel, + 'cs_ship_addr_sk' col_name, + d_year, + d_qoy, + i_category, + cs_ext_sales_price ext_sales_price + FROM catalog_sales, + item, + date_dim + WHERE cs_ship_addr_sk IS NULL + AND cs_sold_date_sk=d_date_sk + AND cs_item_sk=i_item_sk) foo +GROUP BY channel, + col_name, + d_year, + d_qoy, + i_category +ORDER BY channel NULLS FIRST, + col_name NULLS FIRST, + d_year NULLS FIRST, + d_qoy NULLS FIRST, + i_category NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk IS NULL)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_item_sk = i_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_ship_customer_sk IS NULL)", + "(ws_sold_date_sk = d_date_sk)", + "(ws_item_sk = i_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_ship_addr_sk IS NULL)", + "(cs_sold_date_sk = d_date_sk)", + "(cs_item_sk = i_item_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category" + ], + "Expressions": [ + "count_star()", + "sum(ext_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "sales_cnt", + "sales_amt" + ] + } + } + ], + "extra_info": { + "Order By": [ + "foo.channel", + "foo.col_name", + "foo.d_year", + "foo.d_qoy", + "foo.i_category" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.is_null($.ss_store_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = ss_sold_date_sk)", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.is_null($.ws_ship_customer_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = ws_sold_date_sk)", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.is_null($.cs_ship_addr_sk)", + "Function": "Vortex Scan", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = cs_sold_date_sk)", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_string_ubigint(#0)", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "__internal_compress_integral_utinyint(#3, 1)", + "#4", + "#5" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category" + ], + "Expressions": [ + "count_star()", + "sum(ext_sales_price)" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_string(#0)", + "#1", + "__internal_decompress_integral_bigint(#2, 1900)", + "__internal_decompress_integral_bigint(#3, 1)", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "sales_cnt", + "sales_amt" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.is_null($.ss_store_sk)", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = ss_sold_date_sk", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450816i64 <= $.d_date_sk <= 2452642i64)", + "Projections": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.is_null($.ws_ship_customer_sk)", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_sales_price" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = ws_sold_date_sk", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450815i64 <= $.d_date_sk <= 2452652i64)", + "Projections": [ + "d_date_sk", + "d_year", + "d_qoy" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.is_null($.cs_ship_addr_sk)", + "Projections": [ + "cs_sold_date_sk", + "cs_item_sk", + "cs_ext_sales_price" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = cs_sold_date_sk", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_string_ubigint(#0)", + "#1", + "__internal_compress_integral_utinyint(#2, 1900)", + "__internal_compress_integral_utinyint(#3, 1)", + "#4", + "#5" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "col_name", + "d_year", + "d_qoy", + "i_category", + "ext_sales_price" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": [ + "count_star()", + "sum(#5)" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_string(#0)", + "#1", + "__internal_decompress_integral_bigint(#2, 1900)", + "__internal_decompress_integral_bigint(#3, 1)", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "219147" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "foo.channel ASC", + "foo.col_name ASC", + "foo.d_year ASC", + "foo.d_qoy ASC", + "foo.i_category ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q77.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q77.slt.no new file mode 100644 index 00000000000..c7a881c112e --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q77.slt.no @@ -0,0 +1,3015 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ss AS + (SELECT s_store_sk, + sum(ss_ext_sales_price) AS sales, + sum(ss_net_profit) AS profit + FROM store_sales, + date_dim, + store + WHERE ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ss_store_sk = s_store_sk + GROUP BY s_store_sk) , + sr AS + (SELECT s_store_sk, + sum(sr_return_amt) AS returns_, + sum(sr_net_loss) AS profit_loss + FROM store_returns, + date_dim, + store + WHERE sr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND sr_store_sk = s_store_sk + GROUP BY s_store_sk), + cs AS + (SELECT cs_call_center_sk, + sum(cs_ext_sales_price) AS sales, + sum(cs_net_profit) AS profit + FROM catalog_sales, + date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + GROUP BY cs_call_center_sk), + cr AS + (SELECT cr_call_center_sk, + sum(cr_return_amount) AS returns_, + sum(cr_net_loss) AS profit_loss + FROM catalog_returns, + date_dim + WHERE cr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + GROUP BY cr_call_center_sk ), + ws AS + (SELECT wp_web_page_sk, + sum(ws_ext_sales_price) AS sales, + sum(ws_net_profit) AS profit + FROM web_sales, + date_dim, + web_page + WHERE ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ws_web_page_sk = wp_web_page_sk + GROUP BY wp_web_page_sk), + wr AS + (SELECT wp_web_page_sk, + sum(wr_return_amt) AS returns_, + sum(wr_net_loss) AS profit_loss + FROM web_returns, + date_dim, + web_page + WHERE wr_returned_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND wr_web_page_sk = wp_web_page_sk + GROUP BY wp_web_page_sk) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + ss.s_store_sk AS id , + sales , + coalesce(returns_, 0) AS returns_ , + (profit - coalesce(profit_loss,0)) AS profit + FROM ss + LEFT JOIN sr ON ss.s_store_sk = sr.s_store_sk + UNION ALL SELECT 'catalog channel' AS channel , + cs_call_center_sk AS id , + sales , + returns_ , + (profit - profit_loss) AS profit + FROM cs , + cr + UNION ALL SELECT 'web channel' AS channel , + ws.wp_web_page_sk AS id , + sales , + coalesce(returns_, 0) returns_ , + (profit - coalesce(profit_loss,0)) AS profit + FROM ws + LEFT JOIN wr ON ws.wp_web_page_sk = wr.wp_web_page_sk ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST, + returns_ DESC +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(ss_store_sk = s_store_sk)", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "s_store_sk", + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(ss_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "sales", + "profit" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(sr_returned_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(sr_store_sk = s_store_sk)", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "s_store_sk", + "Expressions": [ + "sum(sr_return_amt)", + "sum(sr_net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "cs_call_center_sk", + "Expressions": [ + "sum(cs_ext_sales_price)", + "sum(cs_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_call_center_sk", + "sales", + "profit" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cr_returned_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "cr_call_center_sk", + "Expressions": [ + "sum(cr_return_amount)", + "sum(cr_net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cr_call_center_sk", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "wp_web_page_id", + "wp_rec_start_date", + "wp_rec_end_date", + "wp_creation_date_sk", + "wp_access_date_sk", + "wp_autogen_flag", + "wp_customer_sk", + "wp_url", + "wp_type", + "wp_char_count", + "wp_link_count", + "wp_image_count", + "wp_max_ad_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(ws_web_page_sk = wp_web_page_sk)", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "wp_web_page_sk", + "Expressions": [ + "sum(ws_ext_sales_price)", + "sum(ws_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "sales", + "profit" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "wp_web_page_id", + "wp_rec_start_date", + "wp_rec_end_date", + "wp_creation_date_sk", + "wp_access_date_sk", + "wp_autogen_flag", + "wp_customer_sk", + "wp_url", + "wp_type", + "wp_char_count", + "wp_link_count", + "wp_image_count", + "wp_max_ad_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(wr_returned_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(wr_web_page_sk = wp_web_page_sk)", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "wp_web_page_sk", + "Expressions": [ + "sum(wr_return_amt)", + "sum(wr_net_loss)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "returns_", + "profit_loss" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(s_store_sk = s_store_sk)" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "3" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "4" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "5" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(wp_web_page_sk = wp_web_page_sk)" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "x.channel", + "x.id", + "sum(x.returns_)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "wr", + "Table Index": "5" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "4" + } + } + ], + "extra_info": { + "CTE Name": "cr", + "Table Index": "3" + } + } + ], + "extra_info": { + "CTE Name": "cs", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "sr", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "s_store_sk", + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(ss_net_profit)" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "sales", + "profit" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "182344" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_store_sk", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "28576" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_store_sk = s_store_sk)", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Groups": "s_store_sk", + "Expressions": [ + "sum(sr_return_amt)", + "sum(sr_net_loss)" + ], + "Estimated Cardinality": "18063" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "18063" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "18063" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "18063" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(s_store_sk = s_store_sk)", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "182344" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_call_center_sk", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": "cs_call_center_sk", + "Expressions": [ + "sum(cs_ext_sales_price)", + "sum(cs_net_profit)" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_call_center_sk", + "sales", + "profit" + ], + "Estimated Cardinality": "90808" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_call_center_sk", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450852i64 <= $.d_date_sk <= 2452907i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450852)" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "cr_call_center_sk", + "Expressions": [ + "sum(cr_return_amount)", + "sum(cr_net_loss)" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "830348352" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "830348352" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_web_page_sk", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": "wp_web_page_sk", + "Expressions": [ + "sum(ws_ext_sales_price)", + "sum(ws_net_profit)" + ], + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "sales", + "profit" + ], + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "45280" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450865i64 <= $.d_date_sk <= 2452974i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_web_page_sk", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = wr_returned_date_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 2450865)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "wp_web_page_sk", + "Expressions": [ + "sum(wr_return_amt)", + "sum(wr_net_loss)" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(wp_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "830575976" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ], + "Estimated Cardinality": "274040" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "274040" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_sk", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "182344" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_store_sk", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450821i64 <= $.d_date_sk <= 2452820i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "28576" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "s_store_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_store_sk = s_store_sk", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_sk", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "18063" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "s_store_sk = s_store_sk", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "182344" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_call_center_sk", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "cs_call_center_sk", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "90808" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_returned_date_sk", + "cr_call_center_sk", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450852i64 <= $.d_date_sk <= 2452907i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_usmallint(#3, 2450852)" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "cr_call_center_sk", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Projections": [ + "returns_", + "profit_loss" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "830348352" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_web_page_sk", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_utinyint(#0, 1)", + "#1", + "#2", + "__internal_compress_integral_utinyint(#3, 1)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "wp_web_page_sk", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "45280" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450865i64 <= $.d_date_sk <= 2452974i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_returned_date_sk", + "wr_web_page_sk", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = wr_returned_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 2450865)", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "wp_web_page_sk", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1", + "#2" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "wp_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "45280" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "830575976" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "274040" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "x.channel ASC", + "x.id ASC", + "sum(x.returns_) DESC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q78.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q78.slt.no new file mode 100644 index 00000000000..b58ee92dbb5 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q78.slt.no @@ -0,0 +1,2009 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ws AS + (SELECT d_year AS ws_sold_year, + ws_item_sk, + ws_bill_customer_sk ws_customer_sk, + sum(ws_quantity) ws_qty, + sum(ws_wholesale_cost) ws_wc, + sum(ws_sales_price) ws_sp + FROM web_sales + LEFT JOIN web_returns ON wr_order_number=ws_order_number + AND ws_item_sk=wr_item_sk + JOIN date_dim ON ws_sold_date_sk = d_date_sk + WHERE wr_order_number IS NULL + GROUP BY d_year, + ws_item_sk, + ws_bill_customer_sk ), + cs AS + (SELECT d_year AS cs_sold_year, + cs_item_sk, + cs_bill_customer_sk cs_customer_sk, + sum(cs_quantity) cs_qty, + sum(cs_wholesale_cost) cs_wc, + sum(cs_sales_price) cs_sp + FROM catalog_sales + LEFT JOIN catalog_returns ON cr_order_number=cs_order_number + AND cs_item_sk=cr_item_sk + JOIN date_dim ON cs_sold_date_sk = d_date_sk + WHERE cr_order_number IS NULL + GROUP BY d_year, + cs_item_sk, + cs_bill_customer_sk ), + ss AS + (SELECT d_year AS ss_sold_year, + ss_item_sk, + ss_customer_sk, + sum(ss_quantity) ss_qty, + sum(ss_wholesale_cost) ss_wc, + sum(ss_sales_price) ss_sp + FROM store_sales + LEFT JOIN store_returns ON sr_ticket_number=ss_ticket_number + AND ss_item_sk=sr_item_sk + JOIN date_dim ON ss_sold_date_sk = d_date_sk + WHERE sr_ticket_number IS NULL + GROUP BY d_year, + ss_item_sk, + ss_customer_sk ) +SELECT ss_sold_year, + ss_item_sk, + ss_customer_sk, + round((ss_qty*1.00)/(coalesce(ws_qty,0)+coalesce(cs_qty,0)),2) ratio, + ss_qty store_qty, + ss_wc store_wholesale_cost, + ss_sp store_sales_price, + coalesce(ws_qty,0)+coalesce(cs_qty,0) other_chan_qty, + coalesce(ws_wc,0)+coalesce(cs_wc,0) other_chan_wholesale_cost, + coalesce(ws_sp,0)+coalesce(cs_sp,0) other_chan_sales_price +FROM ss +LEFT JOIN ws ON (ws_sold_year=ss_sold_year + AND ws_item_sk=ss_item_sk + AND ws_customer_sk=ss_customer_sk) +LEFT JOIN cs ON (cs_sold_year=ss_sold_year + AND cs_item_sk=ss_item_sk + AND cs_customer_sk=ss_customer_sk) +WHERE (coalesce(ws_qty,0)>0 + OR coalesce(cs_qty, 0)>0) + AND ss_sold_year=2000 +ORDER BY ss_sold_year, + ss_item_sk, + ss_customer_sk, + ss_qty DESC, + ss_wc DESC, + ss_sp DESC, + other_chan_qty, + other_chan_wholesale_cost, + other_chan_sales_price, + ratio +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)" + } + } + ], + "extra_info": { + "Expressions": "(wr_order_number IS NULL)" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "ws_item_sk", + "ws_bill_customer_sk" + ], + "Expressions": [ + "sum(ws_quantity)", + "sum(ws_wholesale_cost)", + "sum(ws_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_year", + "ws_item_sk", + "ws_customer_sk", + "ws_qty", + "ws_wc", + "ws_sp" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)" + } + } + ], + "extra_info": { + "Expressions": "(cr_order_number IS NULL)" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "cs_item_sk", + "cs_bill_customer_sk" + ], + "Expressions": [ + "sum(cs_quantity)", + "sum(cs_wholesale_cost)", + "sum(cs_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_year", + "cs_item_sk", + "cs_customer_sk", + "cs_qty", + "cs_wc", + "cs_sp" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)" + } + } + ], + "extra_info": { + "Expressions": "(sr_ticket_number IS NULL)" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "ss_item_sk", + "ss_customer_sk" + ], + "Expressions": [ + "sum(ss_quantity)", + "sum(ss_wholesale_cost)", + "sum(ss_sales_price)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ss_qty", + "ss_wc", + "ss_sp" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_sold_year = ws_sold_year)", + "(ss_item_sk = ws_item_sk)", + "(ss_customer_sk = ws_customer_sk)" + ] + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_sold_year = cs_sold_year)", + "(ss_item_sk = cs_item_sk)", + "(ss_customer_sk = cs_customer_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "((COALESCE(ws_qty, CAST(0 AS HUGEINT)) > CAST(0 AS HUGEINT)) OR (COALESCE(cs_qty, CAST(0 AS HUGEINT)) > CAST(0 AS HUGEINT)))", + "(ss_sold_year = CAST(2000 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ratio", + "store_qty", + "store_wholesale_cost", + "store_sales_price", + "other_chan_qty", + "other_chan_wholesale_cost", + "other_chan_sales_price" + ] + } + } + ], + "extra_info": { + "Order By": [ + "ss.ss_sold_year", + "ss.ss_item_sk", + "ss.ss_customer_sk", + "ss.ss_qty", + "ss.ss_wc", + "ss.ss_sp", + "(COALESCE(ws.ws_qty, 0) + COALESCE(cs.cs_qty, 0))", + "(COALESCE(ws.ws_wc, 0) + COALESCE(cs.cs_wc, 0))", + "(COALESCE(ws.ws_sp, 0) + COALESCE(cs.cs_sp, 0))", + "round(((ss.ss_qty * 1.00) / (COALESCE(ws.ws_qty, 0) + COALESCE(cs.cs_qty, 0))), 2)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ss", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cs", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ws", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_ticket_number = sr_ticket_number)", + "(ss_item_sk = sr_item_sk)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "(sr_ticket_number IS NULL)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "ss_item_sk", + "ss_customer_sk" + ], + "Expressions": [ + "sum(ss_quantity)", + "sum(ss_wholesale_cost)", + "sum(ss_sales_price)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ss_qty", + "ss_wc", + "ss_sp" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_item_sk", + "wr_order_number" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_order_number = wr_order_number)", + "(ws_item_sk = wr_item_sk)" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "(wr_order_number IS NULL)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "ws_item_sk", + "ws_bill_customer_sk" + ], + "Expressions": [ + "sum(ws_quantity)", + "sum(ws_wholesale_cost)", + "sum(ws_sales_price)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_year", + "ws_item_sk", + "ws_customer_sk", + "ws_qty", + "ws_wc", + "ws_sp" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_sold_year = ws_sold_year)", + "(ss_item_sk = ws_item_sk)", + "(ss_customer_sk = ws_customer_sk)" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_order_number = cr_order_number)", + "(cs_item_sk = cr_item_sk)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "(cr_order_number IS NULL)", + "Estimated Cardinality": "28731" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": [ + "d_year", + "cs_item_sk", + "cs_bill_customer_sk" + ], + "Expressions": [ + "sum(cs_quantity)", + "sum(cs_wholesale_cost)", + "sum(cs_sales_price)" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_year", + "cs_item_sk", + "cs_customer_sk", + "cs_qty", + "cs_wc", + "cs_sp" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_sold_year = cs_sold_year)", + "(ss_item_sk = cs_item_sk)", + "(ss_customer_sk = cs_customer_sk)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expressions": "((COALESCE(ws_qty, 0) > 0) OR (COALESCE(cs_qty, 0) > 0))", + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ss_qty", + "(COALESCE(ws_qty, 0) + COALESCE(cs_qty, 0))", + "store_wholesale_cost", + "store_sales_price", + "ws_wc", + "cs_wc", + "ws_sp", + "cs_sp" + ], + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ratio", + "store_qty", + "store_wholesale_cost", + "store_sales_price", + "other_chan_qty", + "other_chan_wholesale_cost", + "other_chan_sales_price" + ], + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_ticket_number" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_ticket_number = sr_ticket_number", + "ss_item_sk = sr_item_sk" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expression": "(sr_ticket_number IS NULL)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "ss_item_sk", + "ss_customer_sk", + "ss_quantity", + "ss_wholesale_cost", + "ss_sales_price" + ], + "Estimated Cardinality": "11535" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_sales_price" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_item_sk", + "wr_order_number" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ws_order_number = wr_order_number", + "ws_item_sk = wr_item_sk" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expression": "(wr_order_number IS NULL)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_quantity", + "ws_wholesale_cost", + "ws_sales_price" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_sold_year = ws_sold_year", + "ss_item_sk = ws_item_sk", + "ss_customer_sk = ws_customer_sk" + ], + "Estimated Cardinality": "11534" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_sales_price" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "cs_order_number = cr_order_number", + "cs_item_sk = cr_item_sk" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expression": "(cr_order_number IS NULL)", + "Estimated Cardinality": "28731" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "28731" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": [ + "d_date_sk", + "d_year" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "#2", + "#3", + "#4", + "__internal_compress_integral_utinyint(#5, 2000)" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Projections": [ + "d_year", + "cs_item_sk", + "cs_bill_customer_sk", + "cs_quantity", + "cs_wholesale_cost", + "cs_sales_price" + ], + "Estimated Cardinality": "5744" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2000)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "5743" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_sold_year = cs_sold_year", + "ss_item_sk = cs_item_sk", + "ss_customer_sk = cs_customer_sk" + ], + "Estimated Cardinality": "11534" + } + } + ], + "extra_info": { + "Expression": "((COALESCE(ws_qty, 0) > 0) OR (COALESCE(cs_qty, 0) > 0))", + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Projections": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ss_qty", + "(COALESCE(ws_qty, 0) + COALESCE(cs_qty, 0))", + "store_wholesale_cost", + "store_sales_price", + "ws_wc", + "cs_wc", + "ws_sp", + "cs_sp" + ], + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Projections": [ + "ss_sold_year", + "ss_item_sk", + "ss_customer_sk", + "ratio", + "store_qty", + "store_wholesale_cost", + "store_sales_price", + "other_chan_qty", + "other_chan_wholesale_cost", + "other_chan_sales_price" + ], + "Estimated Cardinality": "2306" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "ss.ss_sold_year ASC", + "ss.ss_item_sk ASC", + "ss.ss_customer_sk ASC", + "ss.ss_qty DESC", + "ss.ss_wc DESC", + "ss.ss_sp DESC", + "(COALESCE(ws.ws_qty, 0) + COALESCE(cs.cs_qty, 0)) ASC", + "(COALESCE(ws.ws_wc, 0) + COALESCE(cs.cs_wc, 0)) ASC", + "(COALESCE(ws.ws_sp, 0) + COALESCE(cs.cs_sp, 0)) ASC", + "round(((ss.ss_qty * 1.00) / (COALESCE(ws.ws_qty, 0) + COALESCE(cs.cs_qty, 0))), 2) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q79.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q79.slt.no new file mode 100644 index 00000000000..d8039b8e64f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q79.slt.no @@ -0,0 +1,821 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_last_name, + c_first_name, + SUBSTRING(s_city,1,30), + ss_ticket_number, + amt, + profit +FROM + (SELECT ss_ticket_number , + ss_customer_sk , + store.s_city , + sum(ss_coupon_amt) amt , + sum(ss_net_profit) profit + FROM store_sales, + date_dim, + store, + household_demographics + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_store_sk = store.s_store_sk + AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + AND (household_demographics.hd_dep_count = 6 + OR household_demographics.hd_vehicle_count > 2) + AND date_dim.d_dow = 1 + AND date_dim.d_year IN (1999, + 1999+1, + 1999+2) + AND store.s_number_employees BETWEEN 200 AND 295 + GROUP BY ss_ticket_number, + ss_customer_sk, + ss_addr_sk, + store.s_city) ms, + customer +WHERE ss_customer_sk = c_customer_sk +ORDER BY c_last_name NULLS FIRST, + c_first_name NULLS FIRST, + SUBSTRING(s_city,1,30) NULLS FIRST, + profit NULLS FIRST, + ss_ticket_number +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "((hd_dep_count = CAST(6 AS BIGINT)) OR (hd_vehicle_count > CAST(2 AS INTEGER)))", + "(d_dow = CAST(1 AS BIGINT))", + "(d_year IN (CAST(1999 AS BIGINT), CAST((1999 + 1) AS BIGINT), CAST((1999 + 2) AS BIGINT)))", + "(s_number_employees >= CAST(200 AS BIGINT))", + "(s_number_employees <= CAST(295 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "s_city" + ], + "Expressions": [ + "sum(ss_coupon_amt)", + "sum(ss_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "s_city", + "amt", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(ss_customer_sk = c_customer_sk)" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "\"substring\"(s_city, CAST(1 AS BIGINT), CAST(30 AS BIGINT))", + "ss_ticket_number", + "amt", + "profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_last_name", + "memory.main.customer.c_first_name", + "main.\"substring\"(ms.s_city, 1, 30)", + "ms.profit", + "ms.ss_ticket_number" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([1999i64, 2000i64, 2001i64], $.d_year)", + "($.d_dow = 1i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(200i64 <= $.s_number_employees <= 295i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_city" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(($.hd_dep_count = 6i64) or ($.hd_vehicle_count > 2i32))", + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 1)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "s_city" + ], + "Expressions": [ + "sum(ss_coupon_amt)", + "sum(ss_net_profit)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_ticket_number", + "ss_customer_sk", + "s_city", + "amt", + "profit" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "\"substring\"(s_city, 1, 30)", + "ss_ticket_number", + "amt", + "profit" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_ticket_number", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_dow=1", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(200i64 <= $.s_number_employees <= 295i64)", + "Projections": [ + "s_store_sk", + "s_city" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(($.hd_dep_count = 6i64) or ($.hd_vehicle_count > 2i32))", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 1)", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 1)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "ss_addr_sk", + "s_city", + "ss_coupon_amt", + "ss_net_profit" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3" + ], + "Aggregates": [ + "sum(#4)", + "sum(#5)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)", + "__internal_decompress_integral_bigint(#2, 1)", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "ss_ticket_number", + "ss_customer_sk", + "s_city", + "amt", + "profit" + ], + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "\"substring\"(s_city, 1, 30)", + "ss_ticket_number", + "amt", + "profit" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer.c_last_name ASC", + "memory.main.customer.c_first_name ASC", + "main.\"substring\"(ms.s_city, 1, 30) ASC", + "ms.profit ASC", + "ms.ss_ticket_number ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q8.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q8.slt.no new file mode 100644 index 00000000000..6fb0934ff07 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q8.slt.no @@ -0,0 +1,1436 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT s_store_name, + sum(ss_net_profit) +FROM store_sales, + date_dim, + store, + (SELECT ca_zip + FROM + (SELECT SUBSTRING(ca_zip, 1, 5) ca_zip + FROM customer_address + WHERE SUBSTRING(ca_zip, 1, 5) IN ('24128', + '76232', + '65084', + '87816', + '83926', + '77556', + '20548', + '26231', + '43848', + '15126', + '91137', + '61265', + '98294', + '25782', + '17920', + '18426', + '98235', + '40081', + '84093', + '28577', + '55565', + '17183', + '54601', + '67897', + '22752', + '86284', + '18376', + '38607', + '45200', + '21756', + '29741', + '96765', + '23932', + '89360', + '29839', + '25989', + '28898', + '91068', + '72550', + '10390', + '18845', + '47770', + '82636', + '41367', + '76638', + '86198', + '81312', + '37126', + '39192', + '88424', + '72175', + '81426', + '53672', + '10445', + '42666', + '66864', + '66708', + '41248', + '48583', + '82276', + '18842', + '78890', + '49448', + '14089', + '38122', + '34425', + '79077', + '19849', + '43285', + '39861', + '66162', + '77610', + '13695', + '99543', + '83444', + '83041', + '12305', + '57665', + '68341', + '25003', + '57834', + '62878', + '49130', + '81096', + '18840', + '27700', + '23470', + '50412', + '21195', + '16021', + '76107', + '71954', + '68309', + '18119', + '98359', + '64544', + '10336', + '86379', + '27068', + '39736', + '98569', + '28915', + '24206', + '56529', + '57647', + '54917', + '42961', + '91110', + '63981', + '14922', + '36420', + '23006', + '67467', + '32754', + '30903', + '20260', + '31671', + '51798', + '72325', + '85816', + '68621', + '13955', + '36446', + '41766', + '68806', + '16725', + '15146', + '22744', + '35850', + '88086', + '51649', + '18270', + '52867', + '39972', + '96976', + '63792', + '11376', + '94898', + '13595', + '10516', + '90225', + '58943', + '39371', + '94945', + '28587', + '96576', + '57855', + '28488', + '26105', + '83933', + '25858', + '34322', + '44438', + '73171', + '30122', + '34102', + '22685', + '71256', + '78451', + '54364', + '13354', + '45375', + '40558', + '56458', + '28286', + '45266', + '47305', + '69399', + '83921', + '26233', + '11101', + '15371', + '69913', + '35942', + '15882', + '25631', + '24610', + '44165', + '99076', + '33786', + '70738', + '26653', + '14328', + '72305', + '62496', + '22152', + '10144', + '64147', + '48425', + '14663', + '21076', + '18799', + '30450', + '63089', + '81019', + '68893', + '24996', + '51200', + '51211', + '45692', + '92712', + '70466', + '79994', + '22437', + '25280', + '38935', + '71791', + '73134', + '56571', + '14060', + '19505', + '72425', + '56575', + '74351', + '68786', + '51650', + '20004', + '18383', + '76614', + '11634', + '18906', + '15765', + '41368', + '73241', + '76698', + '78567', + '97189', + '28545', + '76231', + '75691', + '22246', + '51061', + '90578', + '56691', + '68014', + '51103', + '94167', + '57047', + '14867', + '73520', + '15734', + '63435', + '25733', + '35474', + '24676', + '94627', + '53535', + '17879', + '15559', + '53268', + '59166', + '11928', + '59402', + '33282', + '45721', + '43933', + '68101', + '33515', + '36634', + '71286', + '19736', + '58058', + '55253', + '67473', + '41918', + '19515', + '36495', + '19430', + '22351', + '77191', + '91393', + '49156', + '50298', + '87501', + '18652', + '53179', + '18767', + '63193', + '23968', + '65164', + '68880', + '21286', + '72823', + '58470', + '67301', + '13394', + '31016', + '70372', + '67030', + '40604', + '24317', + '45748', + '39127', + '26065', + '77721', + '31029', + '31880', + '60576', + '24671', + '45549', + '13376', + '50016', + '33123', + '19769', + '22927', + '97789', + '46081', + '72151', + '15723', + '46136', + '51949', + '68100', + '96888', + '64528', + '14171', + '79777', + '28709', + '11489', + '25103', + '32213', + '78668', + '22245', + '15798', + '27156', + '37930', + '62971', + '21337', + '51622', + '67853', + '10567', + '38415', + '15455', + '58263', + '42029', + '60279', + '37125', + '56240', + '88190', + '50308', + '26859', + '64457', + '89091', + '82136', + '62377', + '36233', + '63837', + '58078', + '17043', + '30010', + '60099', + '28810', + '98025', + '29178', + '87343', + '73273', + '30469', + '64034', + '39516', + '86057', + '21309', + '90257', + '67875', + '40162', + '11356', + '73650', + '61810', + '72013', + '30431', + '22461', + '19512', + '13375', + '55307', + '30625', + '83849', + '68908', + '26689', + '96451', + '38193', + '46820', + '88885', + '84935', + '69035', + '83144', + '47537', + '56616', + '94983', + '48033', + '69952', + '25486', + '61547', + '27385', + '61860', + '58048', + '56910', + '16807', + '17871', + '35258', + '31387', + '35458', + '35576') INTERSECT + SELECT ca_zip + FROM + (SELECT SUBSTRING(ca_zip, 1, 5) ca_zip, + count(*) cnt + FROM customer_address, + customer + WHERE ca_address_sk = c_current_addr_sk + AND c_preferred_cust_flag='Y' + GROUP BY ca_zip + HAVING count(*) > 10)A1)A2) V1 +WHERE ss_store_sk = s_store_sk + AND ss_sold_date_sk = d_date_sk + AND d_qoy = 2 + AND d_year = 1998 + AND (SUBSTRING(s_zip, 1, 2) = SUBSTRING(V1.ca_zip, 1, 2)) +GROUP BY s_store_name +ORDER BY s_store_name +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "(\"substring\"(ca_zip, CAST(1 AS BIGINT), CAST(5 AS BIGINT)) IN (CAST('24128' AS VARCHAR), CAST('76232' AS VARCHAR), CAST('65084' AS VARCHAR), CAST('87816' AS VARCHAR), CAST('83926' AS VARCHAR), CAST('77556' AS VARCHAR), CAST('20548' AS VARCHAR), CAST('26231' AS VARCHAR), CAST('43848' AS VARCHAR), CAST('15126' AS VARCHAR), CAST('91137' AS VARCHAR), CAST('61265' AS VARCHAR), CAST('98294' AS VARCHAR), CAST('25782' AS VARCHAR), CAST('17920' AS VARCHAR), CAST('18426' AS VARCHAR), CAST('98235' AS VARCHAR), CAST('40081' AS VARCHAR), CAST('84093' AS VARCHAR), CAST('28577' AS VARCHAR), CAST('55565' AS VARCHAR), CAST('17183' AS VARCHAR), CAST('54601' AS VARCHAR), CAST('67897' AS VARCHAR), CAST('22752' AS VARCHAR), CAST('86284' AS VARCHAR), CAST('18376' AS VARCHAR), CAST('38607' AS VARCHAR), CAST('45200' AS VARCHAR), CAST('21756' AS VARCHAR), CAST('29741' AS VARCHAR), CAST('96765' AS VARCHAR), CAST('23932' AS VARCHAR), CAST('89360' AS VARCHAR), CAST('29839' AS VARCHAR), CAST('25989' AS VARCHAR), CAST('28898' AS VARCHAR), CAST('91068' AS VARCHAR), CAST('72550' AS VARCHAR), CAST('10390' AS VARCHAR), CAST('18845' AS VARCHAR), CAST('47770' AS VARCHAR), CAST('82636' AS VARCHAR), CAST('41367' AS VARCHAR), CAST('76638' AS VARCHAR), CAST('86198' AS VARCHAR), CAST('81312' AS VARCHAR), CAST('37126' AS VARCHAR), CAST('39192' AS VARCHAR), CAST('88424' AS VARCHAR), CAST('72175' AS VARCHAR), CAST('81426' AS VARCHAR), CAST('53672' AS VARCHAR), CAST('10445' AS VARCHAR), CAST('42666' AS VARCHAR), CAST('66864' AS VARCHAR), CAST('66708' AS VARCHAR), CAST('41248' AS VARCHAR), CAST('48583' AS VARCHAR), CAST('82276' AS VARCHAR), CAST('18842' AS VARCHAR), CAST('78890' AS VARCHAR), CAST('49448' AS VARCHAR), CAST('14089' AS VARCHAR), CAST('38122' AS VARCHAR), CAST('34425' AS VARCHAR), CAST('79077' AS VARCHAR), CAST('19849' AS VARCHAR), CAST('43285' AS VARCHAR), CAST('39861' AS VARCHAR), CAST('66162' AS VARCHAR), CAST('77610' AS VARCHAR), CAST('13695' AS VARCHAR), CAST('99543' AS VARCHAR), CAST('83444' AS VARCHAR), CAST('83041' AS VARCHAR), CAST('12305' AS VARCHAR), CAST('57665' AS VARCHAR), CAST('68341' AS VARCHAR), CAST('25003' AS VARCHAR), CAST('57834' AS VARCHAR), CAST('62878' AS VARCHAR), CAST('49130' AS VARCHAR), CAST('81096' AS VARCHAR), CAST('18840' AS VARCHAR), CAST('27700' AS VARCHAR), CAST('23470' AS VARCHAR), CAST('50412' AS VARCHAR), CAST('21195' AS VARCHAR), CAST('16021' AS VARCHAR), CAST('76107' AS VARCHAR), CAST('71954' AS VARCHAR), CAST('68309' AS VARCHAR), CAST('18119' AS VARCHAR), CAST('98359' AS VARCHAR), CAST('64544' AS VARCHAR), CAST('10336' AS VARCHAR), CAST('86379' AS VARCHAR), CAST('27068' AS VARCHAR), CAST('39736' AS VARCHAR), CAST('98569' AS VARCHAR), CAST('28915' AS VARCHAR), CAST('24206' AS VARCHAR), CAST('56529' AS VARCHAR), CAST('57647' AS VARCHAR), CAST('54917' AS VARCHAR), CAST('42961' AS VARCHAR), CAST('91110' AS VARCHAR), CAST('63981' AS VARCHAR), CAST('14922' AS VARCHAR), CAST('36420' AS VARCHAR), CAST('23006' AS VARCHAR), CAST('67467' AS VARCHAR), CAST('32754' AS VARCHAR), CAST('30903' AS VARCHAR), CAST('20260' AS VARCHAR), CAST('31671' AS VARCHAR), CAST('51798' AS VARCHAR), CAST('72325' AS VARCHAR), CAST('85816' AS VARCHAR), CAST('68621' AS VARCHAR), CAST('13955' AS VARCHAR), CAST('36446' AS VARCHAR), CAST('41766' AS VARCHAR), CAST('68806' AS VARCHAR), CAST('16725' AS VARCHAR), CAST('15146' AS VARCHAR), CAST('22744' AS VARCHAR), CAST('35850' AS VARCHAR), CAST('88086' AS VARCHAR), CAST('51649' AS VARCHAR), CAST('18270' AS VARCHAR), CAST('52867' AS VARCHAR), CAST('39972' AS VARCHAR), CAST('96976' AS VARCHAR), CAST('63792' AS VARCHAR), CAST('11376' AS VARCHAR), CAST('94898' AS VARCHAR), CAST('13595' AS VARCHAR), CAST('10516' AS VARCHAR), CAST('90225' AS VARCHAR), CAST('58943' AS VARCHAR), CAST('39371' AS VARCHAR), CAST('94945' AS VARCHAR), CAST('28587' AS VARCHAR), CAST('96576' AS VARCHAR), CAST('57855' AS VARCHAR), CAST('28488' AS VARCHAR), CAST('26105' AS VARCHAR), CAST('83933' AS VARCHAR), CAST('25858' AS VARCHAR), CAST('34322' AS VARCHAR), CAST('44438' AS VARCHAR), CAST('73171' AS VARCHAR), CAST('30122' AS VARCHAR), CAST('34102' AS VARCHAR), CAST('22685' AS VARCHAR), CAST('71256' AS VARCHAR), CAST('78451' AS VARCHAR), CAST('54364' AS VARCHAR), CAST('13354' AS VARCHAR), CAST('45375' AS VARCHAR), CAST('40558' AS VARCHAR), CAST('56458' AS VARCHAR), CAST('28286' AS VARCHAR), CAST('45266' AS VARCHAR), CAST('47305' AS VARCHAR), CAST('69399' AS VARCHAR), CAST('83921' AS VARCHAR), CAST('26233' AS VARCHAR), CAST('11101' AS VARCHAR), CAST('15371' AS VARCHAR), CAST('69913' AS VARCHAR), CAST('35942' AS VARCHAR), CAST('15882' AS VARCHAR), CAST('25631' AS VARCHAR), CAST('24610' AS VARCHAR), CAST('44165' AS VARCHAR), CAST('99076' AS VARCHAR), CAST('33786' AS VARCHAR), CAST('70738' AS VARCHAR), CAST('26653' AS VARCHAR), CAST('14328' AS VARCHAR), CAST('72305' AS VARCHAR), CAST('62496' AS VARCHAR), CAST('22152' AS VARCHAR), CAST('10144' AS VARCHAR), CAST('64147' AS VARCHAR), CAST('48425' AS VARCHAR), CAST('14663' AS VARCHAR), CAST('21076' AS VARCHAR), CAST('18799' AS VARCHAR), CAST('30450' AS VARCHAR), CAST('63089' AS VARCHAR), CAST('81019' AS VARCHAR), CAST('68893' AS VARCHAR), CAST('24996' AS VARCHAR), CAST('51200' AS VARCHAR), CAST('51211' AS VARCHAR), CAST('45692' AS VARCHAR), CAST('92712' AS VARCHAR), CAST('70466' AS VARCHAR), CAST('79994' AS VARCHAR), CAST('22437' AS VARCHAR), CAST('25280' AS VARCHAR), CAST('38935' AS VARCHAR), CAST('71791' AS VARCHAR), CAST('73134' AS VARCHAR), CAST('56571' AS VARCHAR), CAST('14060' AS VARCHAR), CAST('19505' AS VARCHAR), CAST('72425' AS VARCHAR), CAST('56575' AS VARCHAR), CAST('74351' AS VARCHAR), CAST('68786' AS VARCHAR), CAST('51650' AS VARCHAR), CAST('20004' AS VARCHAR), CAST('18383' AS VARCHAR), CAST('76614' AS VARCHAR), CAST('11634' AS VARCHAR), CAST('18906' AS VARCHAR), CAST('15765' AS VARCHAR), CAST('41368' AS VARCHAR), CAST('73241' AS VARCHAR), CAST('76698' AS VARCHAR), CAST('78567' AS VARCHAR), CAST('97189' AS VARCHAR), CAST('28545' AS VARCHAR), CAST('76231' AS VARCHAR), CAST('75691' AS VARCHAR), CAST('22246' AS VARCHAR), CAST('51061' AS VARCHAR), CAST('90578' AS VARCHAR), CAST('56691' AS VARCHAR), CAST('68014' AS VARCHAR), CAST('51103' AS VARCHAR), CAST('94167' AS VARCHAR), CAST('57047' AS VARCHAR), CAST('14867' AS VARCHAR), CAST('73520' AS VARCHAR), CAST('15734' AS VARCHAR), CAST('63435' AS VARCHAR), CAST('25733' AS VARCHAR), CAST('35474' AS VARCHAR), CAST('24676' AS VARCHAR), CAST('94627' AS VARCHAR), CAST('53535' AS VARCHAR), CAST('17879' AS VARCHAR), CAST('15559' AS VARCHAR), CAST('53268' AS VARCHAR), CAST('59166' AS VARCHAR), CAST('11928' AS VARCHAR), CAST('59402' AS VARCHAR), CAST('33282' AS VARCHAR), CAST('45721' AS VARCHAR), CAST('43933' AS VARCHAR), CAST('68101' AS VARCHAR), CAST('33515' AS VARCHAR), CAST('36634' AS VARCHAR), CAST('71286' AS VARCHAR), CAST('19736' AS VARCHAR), CAST('58058' AS VARCHAR), CAST('55253' AS VARCHAR), CAST('67473' AS VARCHAR), CAST('41918' AS VARCHAR), CAST('19515' AS VARCHAR), CAST('36495' AS VARCHAR), CAST('19430' AS VARCHAR), CAST('22351' AS VARCHAR), CAST('77191' AS VARCHAR), CAST('91393' AS VARCHAR), CAST('49156' AS VARCHAR), CAST('50298' AS VARCHAR), CAST('87501' AS VARCHAR), CAST('18652' AS VARCHAR), CAST('53179' AS VARCHAR), CAST('18767' AS VARCHAR), CAST('63193' AS VARCHAR), CAST('23968' AS VARCHAR), CAST('65164' AS VARCHAR), CAST('68880' AS VARCHAR), CAST('21286' AS VARCHAR), CAST('72823' AS VARCHAR), CAST('58470' AS VARCHAR), CAST('67301' AS VARCHAR), CAST('13394' AS VARCHAR), CAST('31016' AS VARCHAR), CAST('70372' AS VARCHAR), CAST('67030' AS VARCHAR), CAST('40604' AS VARCHAR), CAST('24317' AS VARCHAR), CAST('45748' AS VARCHAR), CAST('39127' AS VARCHAR), CAST('26065' AS VARCHAR), CAST('77721' AS VARCHAR), CAST('31029' AS VARCHAR), CAST('31880' AS VARCHAR), CAST('60576' AS VARCHAR), CAST('24671' AS VARCHAR), CAST('45549' AS VARCHAR), CAST('13376' AS VARCHAR), CAST('50016' AS VARCHAR), CAST('33123' AS VARCHAR), CAST('19769' AS VARCHAR), CAST('22927' AS VARCHAR), CAST('97789' AS VARCHAR), CAST('46081' AS VARCHAR), CAST('72151' AS VARCHAR), CAST('15723' AS VARCHAR), CAST('46136' AS VARCHAR), CAST('51949' AS VARCHAR), CAST('68100' AS VARCHAR), CAST('96888' AS VARCHAR), CAST('64528' AS VARCHAR), CAST('14171' AS VARCHAR), CAST('79777' AS VARCHAR), CAST('28709' AS VARCHAR), CAST('11489' AS VARCHAR), CAST('25103' AS VARCHAR), CAST('32213' AS VARCHAR), CAST('78668' AS VARCHAR), CAST('22245' AS VARCHAR), CAST('15798' AS VARCHAR), CAST('27156' AS VARCHAR), CAST('37930' AS VARCHAR), CAST('62971' AS VARCHAR), CAST('21337' AS VARCHAR), CAST('51622' AS VARCHAR), CAST('67853' AS VARCHAR), CAST('10567' AS VARCHAR), CAST('38415' AS VARCHAR), CAST('15455' AS VARCHAR), CAST('58263' AS VARCHAR), CAST('42029' AS VARCHAR), CAST('60279' AS VARCHAR), CAST('37125' AS VARCHAR), CAST('56240' AS VARCHAR), CAST('88190' AS VARCHAR), CAST('50308' AS VARCHAR), CAST('26859' AS VARCHAR), CAST('64457' AS VARCHAR), CAST('89091' AS VARCHAR), CAST('82136' AS VARCHAR), CAST('62377' AS VARCHAR), CAST('36233' AS VARCHAR), CAST('63837' AS VARCHAR), CAST('58078' AS VARCHAR), CAST('17043' AS VARCHAR), CAST('30010' AS VARCHAR), CAST('60099' AS VARCHAR), CAST('28810' AS VARCHAR), CAST('98025' AS VARCHAR), CAST('29178' AS VARCHAR), CAST('87343' AS VARCHAR), CAST('73273' AS VARCHAR), CAST('30469' AS VARCHAR), CAST('64034' AS VARCHAR), CAST('39516' AS VARCHAR), CAST('86057' AS VARCHAR), CAST('21309' AS VARCHAR), CAST('90257' AS VARCHAR), CAST('67875' AS VARCHAR), CAST('40162' AS VARCHAR), CAST('11356' AS VARCHAR), CAST('73650' AS VARCHAR), CAST('61810' AS VARCHAR), CAST('72013' AS VARCHAR), CAST('30431' AS VARCHAR), CAST('22461' AS VARCHAR), CAST('19512' AS VARCHAR), CAST('13375' AS VARCHAR), CAST('55307' AS VARCHAR), CAST('30625' AS VARCHAR), CAST('83849' AS VARCHAR), CAST('68908' AS VARCHAR), CAST('26689' AS VARCHAR), CAST('96451' AS VARCHAR), CAST('38193' AS VARCHAR), CAST('46820' AS VARCHAR), CAST('88885' AS VARCHAR), CAST('84935' AS VARCHAR), CAST('69035' AS VARCHAR), CAST('83144' AS VARCHAR), CAST('47537' AS VARCHAR), CAST('56616' AS VARCHAR), CAST('94983' AS VARCHAR), CAST('48033' AS VARCHAR), CAST('69952' AS VARCHAR), CAST('25486' AS VARCHAR), CAST('61547' AS VARCHAR), CAST('27385' AS VARCHAR), CAST('61860' AS VARCHAR), CAST('58048' AS VARCHAR), CAST('56910' AS VARCHAR), CAST('16807' AS VARCHAR), CAST('17871' AS VARCHAR), CAST('35258' AS VARCHAR), CAST('31387' AS VARCHAR), CAST('35458' AS VARCHAR), CAST('35576' AS VARCHAR)))" + } + } + ], + "extra_info": { + "Expressions": "ca_zip" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ca_address_sk = c_current_addr_sk)", + "(c_preferred_cust_flag = CAST('Y' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "ca_zip", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "(count_star() > CAST(10 AS BIGINT))" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_zip", + "cnt" + ] + } + } + ], + "extra_info": { + "Expressions": "ca_zip" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": "ca_zip" + } + } + ], + "extra_info": { + "Expressions": "ca_zip" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_store_sk = s_store_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(d_qoy = CAST(2 AS BIGINT))", + "(d_year = CAST(1998 AS BIGINT))", + "(\"substring\"(s_zip, CAST(1 AS BIGINT), CAST(2 AS BIGINT)) = \"substring\"(ca_zip, CAST(1 AS BIGINT), CAST(2 AS BIGINT)))" + ] + } + } + ], + "extra_info": { + "Groups": "s_store_name", + "Expressions": "sum(ss_net_profit)" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "sum(ss_net_profit)" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.store.s_store_name" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_qoy = 2i64)", + "($.d_year = 1998i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "INTERSECT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + }, + { + "name": "CHUNK_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(\"substring\"(ca_zip, 1, 5) = #0)", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": "IN (...)", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": "ca_zip", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": "ca_zip", + "Estimated Cardinality": "1000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.c_preferred_cust_flag = \"Y\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "400" + } + } + ], + "extra_info": { + "Expressions": "c_current_addr_sk", + "Estimated Cardinality": "400" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = c_current_addr_sk)", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Groups": "ca_zip", + "Expressions": "count_star()", + "Estimated Cardinality": "906" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "906" + } + } + ], + "extra_info": { + "Expressions": "(count_star() > 10)", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Expressions": "ca_zip", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Expressions": "ca_zip", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "181", + "Distinct Targets": "ca_zip" + } + } + ], + "extra_info": { + "Expressions": "ca_zip", + "Estimated Cardinality": "181" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(\"substring\"(ca_zip, 1, 2) = \"substring\"(s_zip, 1, 2))", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "10439537" + } + } + ], + "extra_info": { + "Groups": "s_store_name", + "Expressions": "sum(ss_net_profit)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_name", + "sum(ss_net_profit)" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_store_sk", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_qoy=2" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "ca_zip", + "Estimated Cardinality": "5000" + } + }, + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "\"substring\"(ca_zip, 1, 5) = #0", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expression": "IN (...)", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Projections": "ca_zip", + "Estimated Cardinality": "1000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_zip" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "c_preferred_cust_flag='Y'", + "Projections": "c_current_addr_sk", + "Estimated Cardinality": "400" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = c_current_addr_sk", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 1)" + ], + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Projections": "ca_zip", + "Estimated Cardinality": "1000" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "count_star()", + "Estimated Cardinality": "906" + } + } + ], + "extra_info": { + "Expression": "(count_star() > 10)", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Projections": "ca_zip", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "#0 IS NOT DISTINCT FROM #0", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Projections": "ca_zip", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "181" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name", + "s_zip" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "\"substring\"(ca_zip, 1, 2) = \"substring\"(s_zip, 1, 2)", + "Estimated Cardinality": "181" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "10439537" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_name", + "ss_net_profit" + ], + "Estimated Cardinality": "10439537" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.store.s_store_name ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q80.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q80.slt.no new file mode 100644 index 00000000000..82eb09a8b0f --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q80.slt.no @@ -0,0 +1,2711 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ssr AS + (SELECT s_store_id AS store_id, + sum(ss_ext_sales_price) AS sales, + sum(coalesce(sr_return_amt, 0)) AS returns_, + sum(ss_net_profit - coalesce(sr_net_loss, 0)) AS profit + FROM store_sales + LEFT OUTER JOIN store_returns ON (ss_item_sk = sr_item_sk + AND ss_ticket_number = sr_ticket_number), date_dim, + store, + item, + promotion + WHERE ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ss_store_sk = s_store_sk + AND ss_item_sk = i_item_sk + AND i_current_price > 50 + AND ss_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY s_store_id) , + csr AS + (SELECT cp_catalog_page_id AS catalog_page_id, + sum(cs_ext_sales_price) AS sales, + sum(coalesce(cr_return_amount, 0)) AS returns_, + sum(cs_net_profit - coalesce(cr_net_loss, 0)) AS profit + FROM catalog_sales + LEFT OUTER JOIN catalog_returns ON (cs_item_sk = cr_item_sk + AND cs_order_number = cr_order_number), date_dim, + catalog_page, + item, + promotion + WHERE cs_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND cs_catalog_page_sk = cp_catalog_page_sk + AND cs_item_sk = i_item_sk + AND i_current_price > 50 + AND cs_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY cp_catalog_page_id) , + wsr AS + (SELECT web_site_id, + sum(ws_ext_sales_price) AS sales, + sum(coalesce(wr_return_amt, 0)) AS returns_, + sum(ws_net_profit - coalesce(wr_net_loss, 0)) AS profit + FROM web_sales + LEFT OUTER JOIN web_returns ON (ws_item_sk = wr_item_sk + AND ws_order_number = wr_order_number), date_dim, + web_site, + item, + promotion + WHERE ws_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('2000-08-23' AS date) AND cast('2000-09-22' AS date) + AND ws_web_site_sk = web_site_sk + AND ws_item_sk = i_item_sk + AND i_current_price > 50 + AND ws_promo_sk = p_promo_sk + AND p_channel_tv = 'N' + GROUP BY web_site_id) +SELECT channel , + id , + sum(sales) AS sales , + sum(returns_) AS returns_ , + sum(profit) AS profit +FROM + (SELECT 'store channel' AS channel , + concat('store', store_id) AS id , + sales , + returns_ , + profit + FROM ssr + UNION ALL SELECT 'catalog channel' AS channel , + concat('catalog_page', catalog_page_id) AS id , + sales , + returns_ , + profit + FROM csr + UNION ALL SELECT 'web channel' AS channel , + concat('web_site', web_site_id) AS id , + sales , + returns_ , + profit + FROM wsr ) x +GROUP BY ROLLUP (channel, + id) +ORDER BY channel NULLS FIRST, + id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(ss_store_sk = s_store_sk)", + "(ss_item_sk = i_item_sk)", + "(CAST(i_current_price AS DECIMAL(12,2)) > CAST(50 AS DECIMAL(12,2)))", + "(ss_promo_sk = p_promo_sk)", + "(p_channel_tv = CAST('N' AS VARCHAR))", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "s_store_id", + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum((CAST(ss_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(sr_net_loss AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2)))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "store_id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_sk", + "cp_catalog_page_id", + "cp_start_date_sk", + "cp_end_date_sk", + "cp_department", + "cp_catalog_number", + "cp_catalog_page_number", + "cp_description", + "cp_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(cs_catalog_page_sk = cp_catalog_page_sk)", + "(cs_item_sk = i_item_sk)", + "(CAST(i_current_price AS DECIMAL(12,2)) > CAST(50 AS DECIMAL(12,2)))", + "(cs_promo_sk = p_promo_sk)", + "(p_channel_tv = CAST('N' AS VARCHAR))", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "cp_catalog_page_id", + "Expressions": [ + "sum(cs_ext_sales_price)", + "sum(COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum((CAST(cs_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(cr_net_loss AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2)))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "catalog_page_id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_item_sk = wr_item_sk)", + "(ws_order_number = wr_order_number)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id", + "web_rec_start_date", + "web_rec_end_date", + "web_name", + "web_open_date_sk", + "web_close_date_sk", + "web_class", + "web_manager", + "web_mkt_id", + "web_mkt_class", + "web_mkt_desc", + "web_market_manager", + "web_company_id", + "web_company_name", + "web_street_number", + "web_street_name", + "web_street_type", + "web_suite_number", + "web_city", + "web_county", + "web_state", + "web_zip", + "web_country", + "web_gmt_offset", + "web_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "p_promo_sk", + "p_promo_id", + "p_start_date_sk", + "p_end_date_sk", + "p_item_sk", + "p_cost", + "p_response_target", + "p_promo_name", + "p_channel_dmail", + "p_channel_email", + "p_channel_catalog", + "p_channel_tv", + "p_channel_radio", + "p_channel_press", + "p_channel_event", + "p_channel_demo", + "p_channel_details", + "p_purpose", + "p_discount_active" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(d_date >= CAST('2000-08-23' AS DATE))", + "(ws_web_site_sk = web_site_sk)", + "(ws_item_sk = i_item_sk)", + "(CAST(i_current_price AS DECIMAL(12,2)) > CAST(50 AS DECIMAL(12,2)))", + "(ws_promo_sk = p_promo_sk)", + "(p_channel_tv = CAST('N' AS VARCHAR))", + "(d_date <= CAST('2000-09-22' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "web_site_id", + "Expressions": [ + "sum(ws_ext_sales_price)", + "sum(COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2))))", + "sum((CAST(ws_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(wr_net_loss AS DECIMAL(12,2)), CAST(0 AS DECIMAL(12,2)))))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ] + } + } + ], + "extra_info": { + "Order By": [ + "x.channel", + "x.id" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "wsr", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "csr", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ssr", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.p_channel_tv = \"N\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_promo_sk = p_promo_sk)", + "Estimated Cardinality": "48077" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "48077" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "48077" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "48077" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "48077" + } + } + ], + "extra_info": { + "Groups": "s_store_id", + "Expressions": [ + "sum(ss_ext_sales_price)", + "sum(COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), 0.00))", + "sum((CAST(ss_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(sr_net_loss AS DECIMAL(12,2)), 0.00)))" + ], + "Estimated Cardinality": "44284" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "44284" + } + } + ], + "extra_info": { + "Expressions": [ + "store_id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "44284" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "44284" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "44284" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_catalog_page_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_item_sk", + "cr_order_number", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(cs_item_sk = cr_item_sk)", + "(cs_order_number = cr_order_number)" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.p_channel_tv = \"N\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_promo_sk = p_promo_sk)", + "Estimated Cardinality": "23942" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "23942" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.cp_catalog_page_sk <= 9827i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Expressions": [ + "cp_catalog_page_sk", + "cp_catalog_page_id" + ], + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_catalog_page_sk = cp_catalog_page_sk)", + "Estimated Cardinality": "23942" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_item_sk = i_item_sk)", + "Estimated Cardinality": "23942" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "23942" + } + } + ], + "extra_info": { + "Groups": "cp_catalog_page_id", + "Expressions": [ + "sum(cs_ext_sales_price)", + "sum(COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), 0.00))", + "sum((CAST(cs_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(cr_net_loss AS DECIMAL(12,2)), 0.00)))" + ], + "Estimated Cardinality": "22053" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "22053" + } + } + ], + "extra_info": { + "Expressions": [ + "catalog_page_id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "22053" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "22053" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "22053" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_web_site_sk", + "ws_promo_sk", + "ws_order_number", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_item_sk", + "wr_order_number", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ws_item_sk = wr_item_sk)", + "(ws_order_number = wr_order_number)" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.p_channel_tv = \"N\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_promo_sk = p_promo_sk)", + "Estimated Cardinality": "11938" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "11938" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_site_sk = web_site_sk)", + "Estimated Cardinality": "11938" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "11938" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "11938" + } + } + ], + "extra_info": { + "Groups": "web_site_id", + "Expressions": [ + "sum(ws_ext_sales_price)", + "sum(COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), 0.00))", + "sum((CAST(ws_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(wr_net_loss AS DECIMAL(12,2)), 0.00)))" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "77333" + } + } + ], + "extra_info": { + "Groups": [ + "channel", + "id" + ], + "Expressions": [ + "sum(sales)", + "sum(returns_)", + "sum(profit)" + ], + "Estimated Cardinality": "67379" + } + } + ], + "extra_info": { + "Expressions": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "67379" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_ext_sales_price", + "ss_net_profit" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_ticket_number", + "sr_return_amt", + "sr_net_loss" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_item_sk = sr_item_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "p_channel_tv='N'", + "Projections": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_promo_sk = p_promo_sk", + "Estimated Cardinality": "48077" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "48077" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_id" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "48077" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Projections": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "48077" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "48077" + } + } + ], + "extra_info": { + "Projections": [ + "s_store_id", + "ss_ext_sales_price", + "COALESCE(CAST(sr_return_amt AS DECIMAL(12,2)), 0.00)", + "(CAST(ss_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(sr_net_loss AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "48077" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "44284" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "44284" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_catalog_page_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_ext_sales_price", + "cs_net_profit" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_item_sk", + "cr_order_number", + "cr_return_amount", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "cs_item_sk = cr_item_sk", + "cs_order_number = cr_order_number" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "p_channel_tv='N'", + "Projections": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_promo_sk = p_promo_sk", + "Estimated Cardinality": "23942" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "23942" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.cp_catalog_page_sk <= 9827i64)", + "Projections": [ + "cp_catalog_page_sk", + "cp_catalog_page_id" + ], + "Estimated Cardinality": "11718" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_catalog_page_sk = cp_catalog_page_sk", + "Estimated Cardinality": "23942" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Projections": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_item_sk = i_item_sk", + "Estimated Cardinality": "23942" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "23942" + } + } + ], + "extra_info": { + "Projections": [ + "cp_catalog_page_id", + "cs_ext_sales_price", + "COALESCE(CAST(cr_return_amount AS DECIMAL(12,2)), 0.00)", + "(CAST(cs_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(cr_net_loss AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "23942" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "22053" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "22053" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_web_site_sk", + "ws_promo_sk", + "ws_order_number", + "ws_ext_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_item_sk", + "wr_order_number", + "wr_return_amt", + "wr_net_loss" + ], + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ws_item_sk = wr_item_sk", + "ws_order_number = wr_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "p_channel_tv='N'", + "Projections": "p_promo_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_promo_sk = p_promo_sk", + "Estimated Cardinality": "11938" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-08-23 <= $.d_date <= 2000-09-22)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "11938" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "web_site_sk", + "web_site_id" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_site_sk = web_site_sk", + "Estimated Cardinality": "11938" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.i_current_price > decimal128(5000, precision=7, scale=2))", + "Projections": "i_item_sk", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "11938" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_compress_integral_usmallint(#5, 1)" + ], + "Estimated Cardinality": "11938" + } + } + ], + "extra_info": { + "Projections": [ + "web_site_id", + "ws_ext_sales_price", + "COALESCE(CAST(wr_return_amt AS DECIMAL(12,2)), 0.00)", + "(CAST(ws_net_profit AS DECIMAL(13,2)) - COALESCE(CAST(wr_net_loss AS DECIMAL(12,2)), 0.00))" + ], + "Estimated Cardinality": "11938" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "sum(#1)", + "sum(#2)", + "sum(#3)" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "10996" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "channel", + "id", + "sales", + "returns_", + "profit" + ], + "Estimated Cardinality": "77333" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": [ + "sum(#2)", + "sum(#3)", + "sum(#4)" + ], + "Estimated Cardinality": "67379" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "x.channel ASC", + "x.id ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q81.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q81.slt.no new file mode 100644 index 00000000000..7d00f186c63 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q81.slt.no @@ -0,0 +1,1122 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH customer_total_return AS + (SELECT cr_returning_customer_sk AS ctr_customer_sk , + ca_state AS ctr_state, + sum(cr_return_amt_inc_tax) AS ctr_total_return + FROM catalog_returns , + date_dim , + customer_address + WHERE cr_returned_date_sk = d_date_sk + AND d_year = 2000 + AND cr_returning_addr_sk = ca_address_sk + GROUP BY cr_returning_customer_sk , + ca_state) +SELECT c_customer_id, + c_salutation, + c_first_name, + c_last_name, + ca_street_number, + ca_street_name , + ca_street_type, + ca_suite_number, + ca_city, + ca_county, + ca_state, + ca_zip, + ca_country, + ca_gmt_offset , + ca_location_type, + ctr_total_return +FROM customer_total_return ctr1 , + customer_address , + customer +WHERE ctr1.ctr_total_return > + (SELECT avg(ctr_total_return)*1.2 + FROM customer_total_return ctr2 + WHERE ctr1.ctr_state = ctr2.ctr_state) + AND ca_address_sk = c_current_addr_sk + AND ca_state = 'GA' + AND ctr1.ctr_customer_sk = c_customer_sk +ORDER BY c_customer_id, + c_salutation, + c_first_name, + c_last_name, + ca_street_number, + ca_street_name , + ca_street_type, + ca_suite_number, + ca_city, + ca_county, + ca_state, + ca_zip, + ca_country, + ca_gmt_offset , + ca_location_type, + ctr_total_return +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cr_returned_date_sk = d_date_sk)", + "(d_year = CAST(2000 AS BIGINT))", + "(cr_returning_addr_sk = ca_address_sk)" + ] + } + } + ], + "extra_info": { + "Groups": [ + "cr_returning_customer_sk", + "ca_state" + ], + "Expressions": "sum(cr_return_amt_inc_tax)" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_state", + "ctr_total_return" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "(ctr_state = ctr_state)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ctr_total_return)" + } + } + ], + "extra_info": { + "Expressions": "(avg(ctr_total_return) * CAST(1.2 AS DOUBLE))" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "(ca_address_sk = c_current_addr_sk)", + "(ca_state = CAST('GA' AS VARCHAR))", + "(ctr_customer_sk = c_customer_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_id", + "c_salutation", + "c_first_name", + "c_last_name", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type", + "ctr_total_return" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.customer.c_customer_id", + "memory.main.customer.c_salutation", + "memory.main.customer.c_first_name", + "memory.main.customer.c_last_name", + "memory.main.customer_address.ca_street_number", + "memory.main.customer_address.ca_street_name", + "memory.main.customer_address.ca_street_type", + "memory.main.customer_address.ca_suite_number", + "memory.main.customer_address.ca_city", + "memory.main.customer_address.ca_county", + "memory.main.customer_address.ca_state", + "memory.main.customer_address.ca_zip", + "memory.main.customer_address.ca_country", + "memory.main.customer_address.ca_gmt_offset", + "memory.main.customer_address.ca_location_type", + "ctr1.ctr_total_return" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "5000" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returning_customer_sk", + "cr_returning_addr_sk", + "cr_return_amt_inc_tax" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450852i64 <= $.d_date_sk <= 2452907i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ca_address_sk = cr_returning_addr_sk)", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_usmallint(#1, 2)", + "#2" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": [ + "cr_returning_customer_sk", + "ca_state" + ], + "Expressions": "sum(cr_return_amt_inc_tax)", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 2)", + "#1", + "#2" + ], + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Expressions": [ + "ctr_customer_sk", + "ctr_state", + "ctr_total_return" + ], + "Estimated Cardinality": "2920" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_addr_sk", + "c_salutation", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_state = \"GA\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_customer_sk = ctr_customer_sk)", + "Estimated Cardinality": "584" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ctr_state = ctr_state)", + "Estimated Cardinality": "117" + } + } + ], + "extra_info": { + "Groups": "ctr_state", + "Expressions": "avg(ctr_total_return)", + "Estimated Cardinality": "58" + } + } + ], + "extra_info": { + "Expressions": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_state" + ], + "Estimated Cardinality": "58" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(ctr_state IS NOT DISTINCT FROM ctr_state)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_id", + "c_salutation", + "c_first_name", + "c_last_name", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type", + "ctr_total_return" + ], + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "5000" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_returned_date_sk", + "cr_returning_customer_sk", + "cr_returning_addr_sk", + "cr_return_amt_inc_tax" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ca_address_sk = cr_returning_addr_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_usmallint(#1, 2)", + "#2" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Projections": [ + "cr_returning_customer_sk", + "ca_state", + "cr_return_amt_inc_tax" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 2)", + "#1", + "#2" + ], + "Estimated Cardinality": "2920" + } + }, + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_customer_id", + "c_current_addr_sk", + "c_salutation", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_state='GA'", + "Projections": [ + "ca_address_sk", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_customer_sk = ctr_customer_sk", + "Estimated Cardinality": "584" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0", + "Estimated Cardinality": "2920" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ctr_state = ctr_state", + "Estimated Cardinality": "117" + } + } + ], + "extra_info": { + "Projections": [ + "ctr_state", + "ctr_total_return" + ], + "Estimated Cardinality": "117" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)", + "Estimated Cardinality": "58" + } + } + ], + "extra_info": { + "Projections": [ + "(avg(ctr_total_return) * 1.2)", + "ctr_state" + ], + "Estimated Cardinality": "58" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_state IS NOT DISTINCT FROM ctr_state", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#15", + "Aggregates": "", + "Estimated Cardinality": "572" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "ctr_state IS NOT DISTINCT FROM ctr_state", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(ctr_total_return AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10", + "#11", + "#12", + "#13", + "#14", + "#15" + ], + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "memory.main.customer.c_customer_id ASC", + "memory.main.customer.c_salutation ASC", + "memory.main.customer.c_first_name ASC", + "memory.main.customer.c_last_name ASC", + "memory.main.customer_address.ca_street_number ASC", + "memory.main.customer_address.ca_street_name ASC", + "memory.main.customer_address.ca_street_type ASC", + "memory.main.customer_address.ca_suite_number ASC", + "memory.main.customer_address.ca_city ASC", + "memory.main.customer_address.ca_county ASC", + "memory.main.customer_address.ca_state ASC", + "memory.main.customer_address.ca_zip ASC", + "memory.main.customer_address.ca_country ASC", + "memory.main.customer_address.ca_gmt_offset ASC", + "memory.main.customer_address.ca_location_type ASC", + "ctr1.ctr_total_return ASC" + ] + } + } + ], + "extra_info": { + "CTE Name": "customer_total_return", + "Table Index": "0", + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q82.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q82.slt.no new file mode 100644 index 00000000000..f07598dc9ee --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q82.slt.no @@ -0,0 +1,575 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id , + i_item_desc , + i_current_price +FROM item, + inventory, + date_dim, + store_sales +WHERE i_current_price BETWEEN 62 AND 62+30 + AND inv_item_sk = i_item_sk + AND d_date_sk=inv_date_sk + AND d_date BETWEEN cast('2000-05-25' AS date) AND cast('2000-07-24' AS date) + AND i_manufact_id IN (129, + 270, + 821, + 423) + AND inv_quantity_on_hand BETWEEN 100 AND 500 + AND ss_item_sk = i_item_sk +GROUP BY i_item_id, + i_item_desc, + i_current_price +ORDER BY i_item_id +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk", + "inv_warehouse_sk", + "inv_quantity_on_hand" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(CAST(i_current_price AS DECIMAL(12,2)) >= CAST(62 AS DECIMAL(12,2)))", + "(inv_item_sk = i_item_sk)", + "(d_date_sk = inv_date_sk)", + "(d_date >= CAST('2000-05-25' AS DATE))", + "(i_manufact_id IN (CAST(129 AS BIGINT), CAST(270 AS BIGINT), CAST(821 AS BIGINT), CAST(423 AS BIGINT)))", + "(inv_quantity_on_hand >= CAST(100 AS INTEGER))", + "(ss_item_sk = i_item_sk)", + "(CAST(i_current_price AS DECIMAL(12,2)) <= CAST((62 + 30) AS DECIMAL(12,2)))", + "(d_date <= CAST('2000-07-24' AS DATE))", + "(inv_quantity_on_hand <= CAST(500 AS INTEGER))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.item.i_item_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "ss_item_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(100i32 <= $.inv_quantity_on_hand <= 500i32)", + "Function": "Vortex Scan", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Expressions": [ + "inv_date_sk", + "inv_item_sk" + ], + "Estimated Cardinality": "46980" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-05-25 <= $.d_date <= 2000-07-24)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_date_sk = d_date_sk)", + "Estimated Cardinality": "46980" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "vortex.list.contains([129i64, 270i64, 821i64, 423i64], $.i_manufact_id)", + "(decimal128(6200, precision=7, scale=2) <= $.i_current_price <= decimal128(9200, precision=7, scale=2))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(inv_item_sk = i_item_sk)", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "37644552" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "37644552" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Expressions": "", + "Estimated Cardinality": "24884920" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2" + ], + "Estimated Cardinality": "24884920" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "24884920" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "ss_item_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(100i32 <= $.inv_quantity_on_hand <= 500i32)", + "Projections": [ + "inv_date_sk", + "inv_item_sk" + ], + "Estimated Cardinality": "46980" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-05-25 <= $.d_date <= 2000-07-24)", + "(2450815i64 <= $.d_date_sk <= 2452635i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_date_sk = d_date_sk", + "Estimated Cardinality": "46980" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "vortex.list.contains([129i64, 270i64, 821i64, 423i64], $.i_manufact_id)", + "(decimal128(6200, precision=7, scale=2) <= $.i_current_price <= decimal128(9200, precision=7, scale=2))" + ], + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "inv_item_sk = i_item_sk", + "Estimated Cardinality": "46980" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "37644552" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "37644552" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_current_price" + ], + "Estimated Cardinality": "37644552" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "24884920" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.item.i_item_id ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q83.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q83.slt.no new file mode 100644 index 00000000000..a4443b150a1 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q83.slt.no @@ -0,0 +1,2285 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH sr_items AS + (SELECT i_item_id item_id, + sum(sr_return_quantity) sr_item_qty + FROM store_returns, + item, + date_dim + WHERE sr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND sr_returned_date_sk = d_date_sk + GROUP BY i_item_id), + cr_items AS + (SELECT i_item_id item_id, + sum(cr_return_quantity) cr_item_qty + FROM catalog_returns, + item, + date_dim + WHERE cr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND cr_returned_date_sk = d_date_sk + GROUP BY i_item_id), + wr_items AS + (SELECT i_item_id item_id, + sum(wr_return_quantity) wr_item_qty + FROM web_returns, + item, + date_dim + WHERE wr_item_sk = i_item_sk + AND d_date IN + (SELECT d_date + FROM date_dim + WHERE d_week_seq IN + (SELECT d_week_seq + FROM date_dim + WHERE d_date IN ('2000-06-30', + '2000-09-27', + '2000-11-17'))) + AND wr_returned_date_sk = d_date_sk + GROUP BY i_item_id) +SELECT sr_items.item_id , + sr_item_qty , + (sr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 sr_dev , + cr_item_qty , + (cr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 cr_dev , + wr_item_qty , + (wr_item_qty*1.0000)/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0000 * 100 wr_dev , + (sr_item_qty+cr_item_qty+wr_item_qty)/3.0 average +FROM sr_items , + cr_items , + wr_items +WHERE sr_items.item_id=cr_items.item_id + AND sr_items.item_id=wr_items.item_id +ORDER BY sr_items.item_id NULLS FIRST, + sr_item_qty NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date IN (CAST('2000-06-30' AS DATE), CAST('2000-09-27' AS DATE), CAST('2000-11-17' AS DATE)))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_week_seq = #[50.0])" + } + } + ], + "extra_info": { + "Expressions": "SUBQUERY" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[37.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(sr_item_sk = i_item_sk)", + "SUBQUERY", + "(sr_returned_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(sr_return_quantity)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "sr_item_qty" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date IN (CAST('2000-06-30' AS DATE), CAST('2000-09-27' AS DATE), CAST('2000-11-17' AS DATE)))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_week_seq = #[106.0])" + } + } + ], + "extra_info": { + "Expressions": "SUBQUERY" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[93.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(cr_item_sk = i_item_sk)", + "SUBQUERY", + "(cr_returned_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cr_return_quantity)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "cr_item_qty" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "(d_date IN (CAST('2000-06-30' AS DATE), CAST('2000-09-27' AS DATE), CAST('2000-11-17' AS DATE)))" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_week_seq = #[162.0])" + } + } + ], + "extra_info": { + "Expressions": "SUBQUERY" + } + } + ], + "extra_info": { + "Expressions": "d_date" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(d_date = #[149.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(wr_item_sk = i_item_sk)", + "SUBQUERY", + "(wr_returned_date_sk = d_date_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(wr_return_quantity)" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "wr_item_qty" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "2" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(item_id = item_id)", + "(item_id = item_id)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "sr_item_qty", + "sr_dev", + "cr_item_qty", + "cr_dev", + "wr_item_qty", + "wr_dev", + "average" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sr_items.item_id", + "sr_items.sr_item_qty" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "wr_items", + "Table Index": "2" + } + } + ], + "extra_info": { + "CTE Name": "cr_items", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "sr_items", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450821i64 <= $.d_date_sk <= 2452820i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_week_seq = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "14609" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_item_sk = i_item_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(sr_return_quantity)", + "Estimated Cardinality": "11437" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "sr_item_qty" + ], + "Estimated Cardinality": "11437" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "11437" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_item_sk", + "cr_return_quantity" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_item_sk = i_item_sk)", + "Estimated Cardinality": "14275" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450852i64 <= $.d_date_sk <= 2452907i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_week_seq = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450852)" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(cr_return_quantity)", + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "cr_item_qty" + ], + "Estimated Cardinality": "9144" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "9144" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(2450865i64 <= $.d_date_sk <= 2452974i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "73049" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_week_seq = #0)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "(d_date = #0)", + "Estimated Cardinality": "14609" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_item_sk", + "wr_return_quantity" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_item_sk = i_item_sk)", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = wr_returned_date_sk)", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 2450865)", + "#1", + "#2" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "i_item_id", + "Expressions": "sum(wr_return_quantity)", + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "wr_item_qty" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(item_id = item_id)", + "Estimated Cardinality": "7996" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(item_id = item_id)", + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "sr_item_qty", + "CAST(((sr_item_qty + cr_item_qty) + wr_item_qty) AS DOUBLE)", + "cr_item_qty", + "wr_item_qty" + ], + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Expressions": [ + "item_id", + "sr_item_qty", + "sr_dev", + "cr_item_qty", + "cr_dev", + "wr_item_qty", + "wr_dev", + "average" + ], + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_returned_date_sk", + "sr_item_sk", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450821i64 <= $.d_date_sk <= 2452820i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Projections": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_week_seq = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_item_sk = i_item_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "sr_return_quantity" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "11437" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_returned_date_sk", + "cr_item_sk", + "cr_return_quantity" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_item_sk = i_item_sk", + "Estimated Cardinality": "14275" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450852i64 <= $.d_date_sk <= 2452907i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Projections": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_week_seq = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "__internal_compress_integral_usmallint(#2, 2450852)" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "cr_return_quantity" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "9144" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(2450865i64 <= $.d_date_sk <= 2452974i64)", + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "d_date", + "d_week_seq" + ], + "Estimated Cardinality": "73049" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([2000-06-30, 2000-09-27, 2000-11-17], $.d_date)", + "Projections": "d_week_seq", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_week_seq = #0", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "SEMI", + "Conditions": "d_date = #0", + "Estimated Cardinality": "14609" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_returned_date_sk", + "wr_item_sk", + "wr_return_quantity" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_item_id" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_item_sk = i_item_sk", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = wr_returned_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 2450865)", + "#1", + "#2" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "wr_return_quantity" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "6154" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "item_id = item_id", + "Estimated Cardinality": "7996" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "item_id = item_id", + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Projections": [ + "item_id", + "sr_item_qty", + "CAST(((sr_item_qty + cr_item_qty) + wr_item_qty) AS DOUBLE)", + "cr_item_qty", + "wr_item_qty" + ], + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Projections": [ + "item_id", + "sr_item_qty", + "sr_dev", + "cr_item_qty", + "cr_dev", + "wr_item_qty", + "wr_dev", + "average" + ], + "Estimated Cardinality": "12996" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sr_items.item_id ASC", + "sr_items.sr_item_qty ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q84.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q84.slt.no new file mode 100644 index 00000000000..95cb87010ef --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q84.slt.no @@ -0,0 +1,618 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT c_customer_id AS customer_id , + concat(concat(coalesce(c_last_name, '') , ', '), coalesce(c_first_name, '')) AS customername +FROM customer , + customer_address , + customer_demographics , + household_demographics , + income_band , + store_returns +WHERE ca_city = 'Edgewood' + AND c_current_addr_sk = ca_address_sk + AND ib_lower_bound >= 38128 + AND ib_upper_bound <= 38128 + 50000 + AND ib_income_band_sk = hd_income_band_sk + AND cd_demo_sk = c_current_cdemo_sk + AND hd_demo_sk = c_current_hdemo_sk + AND sr_cdemo_sk = cd_demo_sk +ORDER BY c_customer_id NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ib_income_band_sk", + "ib_lower_bound", + "ib_upper_bound" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ca_city = CAST('Edgewood' AS VARCHAR))", + "(c_current_addr_sk = ca_address_sk)", + "(ib_lower_bound >= CAST(38128 AS BIGINT))", + "(ib_upper_bound <= (38128 + 50000))", + "(ib_income_band_sk = hd_income_band_sk)", + "(cd_demo_sk = c_current_cdemo_sk)", + "(hd_demo_sk = c_current_hdemo_sk)", + "(sr_cdemo_sk = cd_demo_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customername" + ] + } + } + ], + "extra_info": { + "Order By": "memory.main.customer.c_customer_id" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": "cd_demo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(7i64 <= $.sr_cdemo_sk <= 192051i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": "sr_cdemo_sk", + "Estimated Cardinality": "28576" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7200" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_city = \"Edgewood\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(hd_demo_sk = c_current_hdemo_sk)", + "Estimated Cardinality": "2000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.ib_lower_bound >= 38128i64)", + "($.ib_upper_bound <= 88128i32)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Expressions": "ib_income_band_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(hd_income_band_sk = ib_income_band_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_cdemo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "5715" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "109777" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_id", + "customername" + ], + "Estimated Cardinality": "109777" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.cd_demo_sk <= 192051i64)", + "Projections": "cd_demo_sk", + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(7i64 <= $.sr_cdemo_sk <= 192051i64)", + "Projections": "sr_cdemo_sk", + "Estimated Cardinality": "28576" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "hd_demo_sk", + "hd_income_band_sk" + ], + "Estimated Cardinality": "7200" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_city='Edgewood'", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "hd_demo_sk = c_current_hdemo_sk", + "Estimated Cardinality": "2000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "($.ib_lower_bound >= 38128i64)", + "($.ib_upper_bound <= 88128i32)" + ], + "Projections": "ib_income_band_sk", + "Estimated Cardinality": "4" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "hd_income_band_sk = ib_income_band_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_cdemo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "5715" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "109777" + } + } + ], + "extra_info": { + "Projections": [ + "customer_id", + "customername" + ], + "Estimated Cardinality": "109777" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "memory.main.customer.c_customer_id ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q85.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q85.slt.no new file mode 100644 index 00000000000..088c9e2b058 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q85.slt.no @@ -0,0 +1,1113 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT SUBSTRING(r_reason_desc,1,20) , + avg(ws_quantity) avg1, + avg(wr_refunded_cash) avg2, + avg(wr_fee) +FROM web_sales, + web_returns, + web_page, + customer_demographics cd1, + customer_demographics cd2, + customer_address, + date_dim, + reason +WHERE ws_web_page_sk = wp_web_page_sk + AND ws_item_sk = wr_item_sk + AND ws_order_number = wr_order_number + AND ws_sold_date_sk = d_date_sk + AND d_year = 2000 + AND cd1.cd_demo_sk = wr_refunded_cdemo_sk + AND cd2.cd_demo_sk = wr_returning_cdemo_sk + AND ca_address_sk = wr_refunded_addr_sk + AND r_reason_sk = wr_reason_sk + AND ( ( cd1.cd_marital_status = 'M' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = 'Advanced Degree' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 100.00 AND 150.00 ) + OR ( cd1.cd_marital_status = 'S' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = 'College' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 50.00 AND 100.00 ) + OR ( cd1.cd_marital_status = 'W' + AND cd1.cd_marital_status = cd2.cd_marital_status + AND cd1.cd_education_status = '2 yr Degree' + AND cd1.cd_education_status = cd2.cd_education_status + AND ws_sales_price BETWEEN 150.00 AND 200.00 ) ) + AND ( ( ca_country = 'United States' + AND ca_state IN ('IN', + 'OH', + 'NJ') + AND ws_net_profit BETWEEN 100 AND 200) + OR ( ca_country = 'United States' + AND ca_state IN ('WI', + 'CT', + 'KY') + AND ws_net_profit BETWEEN 150 AND 300) + OR ( ca_country = 'United States' + AND ca_state IN ('LA', + 'IA', + 'AR') + AND ws_net_profit BETWEEN 50 AND 250) ) +GROUP BY r_reason_desc +ORDER BY SUBSTRING(r_reason_desc,1,20) , + avg(ws_quantity) , + avg(wr_refunded_cash) , + avg(wr_fee) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "wp_web_page_id", + "wp_rec_start_date", + "wp_rec_end_date", + "wp_creation_date_sk", + "wp_access_date_sk", + "wp_autogen_flag", + "wp_customer_sk", + "wp_url", + "wp_type", + "wp_char_count", + "wp_link_count", + "wp_image_count", + "wp_max_ad_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "r_reason_sk", + "r_reason_id", + "r_reason_desc" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_web_page_sk = wp_web_page_sk)", + "(ws_item_sk = wr_item_sk)", + "(ws_order_number = wr_order_number)", + "(ws_sold_date_sk = d_date_sk)", + "(d_year = CAST(2000 AS BIGINT))", + "(cd_demo_sk = wr_refunded_cdemo_sk)", + "(cd_demo_sk = wr_returning_cdemo_sk)", + "(ca_address_sk = wr_refunded_addr_sk)", + "(r_reason_sk = wr_reason_sk)", + "(((cd_marital_status = CAST('M' AS VARCHAR)) AND (cd_marital_status = cd_marital_status) AND (cd_education_status = CAST('Advanced Degree' AS VARCHAR)) AND (cd_education_status = cd_education_status) AND ((ws_sales_price >= CAST(100.00 AS DECIMAL(7,2))) AND (ws_sales_price <= CAST(150.00 AS DECIMAL(7,2))))) OR ((cd_marital_status = CAST('S' AS VARCHAR)) AND (cd_marital_status = cd_marital_status) AND (cd_education_status = CAST('College' AS VARCHAR)) AND (cd_education_status = cd_education_status) AND ((ws_sales_price >= CAST(50.00 AS DECIMAL(7,2))) AND (ws_sales_price <= CAST(100.00 AS DECIMAL(7,2))))) OR ((cd_marital_status = CAST('W' AS VARCHAR)) AND (cd_marital_status = cd_marital_status) AND (cd_education_status = CAST('2 yr Degree' AS VARCHAR)) AND (cd_education_status = cd_education_status) AND ((ws_sales_price >= CAST(150.00 AS DECIMAL(7,2))) AND (ws_sales_price <= CAST(200.00 AS DECIMAL(7,2))))))", + "(((ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('IN' AS VARCHAR), CAST('OH' AS VARCHAR), CAST('NJ' AS VARCHAR))) AND ((CAST(ws_net_profit AS DECIMAL(12,2)) >= CAST(100 AS DECIMAL(12,2))) AND (CAST(ws_net_profit AS DECIMAL(12,2)) <= CAST(200 AS DECIMAL(12,2))))) OR ((ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('WI' AS VARCHAR), CAST('CT' AS VARCHAR), CAST('KY' AS VARCHAR))) AND ((CAST(ws_net_profit AS DECIMAL(12,2)) >= CAST(150 AS DECIMAL(12,2))) AND (CAST(ws_net_profit AS DECIMAL(12,2)) <= CAST(300 AS DECIMAL(12,2))))) OR ((ca_country = CAST('United States' AS VARCHAR)) AND (ca_state IN (CAST('LA' AS VARCHAR), CAST('IA' AS VARCHAR), CAST('AR' AS VARCHAR))) AND ((CAST(ws_net_profit AS DECIMAL(12,2)) >= CAST(50 AS DECIMAL(12,2))) AND (CAST(ws_net_profit AS DECIMAL(12,2)) <= CAST(250 AS DECIMAL(12,2))))))" + ] + } + } + ], + "extra_info": { + "Groups": "r_reason_desc", + "Expressions": [ + "avg(ws_quantity)", + "avg(wr_refunded_cash)", + "avg(wr_fee)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "\"substring\"(r_reason_desc, CAST(1 AS BIGINT), CAST(20 AS BIGINT))", + "avg1", + "avg2", + "avg(wr_fee)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "main.\"substring\"(memory.main.reason.r_reason_desc, 1, 20)", + "avg(memory.main.web_sales.ws_quantity)", + "avg(memory.main.web_returns.wr_refunded_cash)", + "avg(memory.main.web_returns.wr_fee)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(19i64 <= $.cd_demo_sk <= 192069i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(19i64 <= $.cd_demo_sk <= 192069i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "192080" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_web_page_sk", + "ws_order_number", + "ws_quantity", + "ws_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 2000i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14322" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_item_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_cdemo_sk", + "wr_reason_sk", + "wr_order_number", + "wr_fee", + "wr_refunded_cash" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_country = \"United States\")", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_refunded_addr_sk = ca_address_sk)", + "Estimated Cardinality": "1407" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Expressions": [ + "r_reason_sk", + "r_reason_desc" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_reason_sk = r_reason_sk)", + "Estimated Cardinality": "1407" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ws_item_sk = wr_item_sk)", + "(ws_order_number = wr_order_number)" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expressions": "((((ws_net_profit >= 100.00) AND (ws_net_profit <= 200.00)) AND ((ca_state = 'IN') OR (ca_state = 'OH') OR (ca_state = 'NJ'))) OR (((ws_net_profit >= 150.00) AND (ws_net_profit <= 300.00)) AND ((ca_state = 'WI') OR (ca_state = 'CT') OR (ca_state = 'KY'))) OR (((ws_net_profit >= 50.00) AND (ws_net_profit <= 250.00)) AND ((ca_state = 'LA') OR (ca_state = 'IA') OR (ca_state = 'AR'))))", + "Estimated Cardinality": "2864" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Expressions": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = wr_refunded_cdemo_sk)", + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Expressions": "((((ws_sales_price >= 100.00) AND (ws_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = 'Advanced Degree')) OR (((ws_sales_price >= 50.00) AND (ws_sales_price <= 100.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')) OR (((ws_sales_price >= 150.00) AND (ws_sales_price <= 200.00)) AND (cd_marital_status = 'W') AND (cd_education_status = '2 yr Degree')))", + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(cd_demo_sk = wr_returning_cdemo_sk)", + "(cd_education_status = cd_education_status)", + "(cd_marital_status = cd_marital_status)" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_uinteger(#0, 19)", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Groups": "r_reason_desc", + "Expressions": [ + "avg(ws_quantity)", + "avg(wr_refunded_cash)", + "avg(wr_fee)" + ], + "Estimated Cardinality": "47584" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3" + ], + "Estimated Cardinality": "47584" + } + } + ], + "extra_info": { + "Expressions": [ + "\"substring\"(r_reason_desc, 1, 20)", + "avg1", + "avg2", + "avg(wr_fee)" + ], + "Estimated Cardinality": "47584" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(19i64 <= $.cd_demo_sk <= 192069i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(19i64 <= $.cd_demo_sk <= 192069i64)", + "Projections": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "192080" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_web_page_sk", + "ws_order_number", + "ws_quantity", + "ws_sales_price", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=2000", + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14322" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "wr_item_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_cdemo_sk", + "wr_reason_sk", + "wr_order_number", + "wr_fee", + "wr_refunded_cash" + ], + "Estimated Cardinality": "7037" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_country='United States'", + "Projections": [ + "ca_address_sk", + "ca_state" + ], + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_refunded_addr_sk = ca_address_sk", + "Estimated Cardinality": "1407" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "r_reason_sk", + "r_reason_desc" + ], + "Estimated Cardinality": "3" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_reason_sk = r_reason_sk", + "Estimated Cardinality": "1407" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ws_item_sk = wr_item_sk", + "ws_order_number = wr_order_number" + ], + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Expression": "((((ws_net_profit >= 100.00) AND (ws_net_profit <= 200.00)) AND ((ca_state = 'IN') OR (ca_state = 'OH') OR (ca_state = 'NJ'))) OR (((ws_net_profit >= 150.00) AND (ws_net_profit <= 300.00)) AND ((ca_state = 'WI') OR (ca_state = 'CT') OR (ca_state = 'KY'))) OR (((ws_net_profit >= 50.00) AND (ws_net_profit <= 250.00)) AND ((ca_state = 'LA') OR (ca_state = 'IA') OR (ca_state = 'AR'))))", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#4", + "#5", + "#6", + "#7", + "#9" + ], + "Estimated Cardinality": "2864" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "wp_web_page_sk", + "Estimated Cardinality": "6" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "2864" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = wr_refunded_cdemo_sk", + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Expression": "((((ws_sales_price >= 100.00) AND (ws_sales_price <= 150.00)) AND (cd_marital_status = 'M') AND (cd_education_status = 'Advanced Degree')) OR (((ws_sales_price >= 50.00) AND (ws_sales_price <= 100.00)) AND (cd_marital_status = 'S') AND (cd_education_status = 'College')) OR (((ws_sales_price >= 150.00) AND (ws_sales_price <= 200.00)) AND (cd_marital_status = 'W') AND (cd_education_status = '2 yr Degree')))", + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "cd_demo_sk = wr_returning_cdemo_sk", + "cd_education_status = cd_education_status", + "cd_marital_status = cd_marital_status" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_uinteger(#0, 19)", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Projections": [ + "r_reason_desc", + "ws_quantity", + "wr_refunded_cash", + "wr_fee" + ], + "Estimated Cardinality": "78188" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": [ + "avg(#1)", + "avg(#2)", + "avg(#3)" + ], + "Estimated Cardinality": "47584" + } + } + ], + "extra_info": { + "Projections": [ + "\"substring\"(r_reason_desc, 1, 20)", + "avg1", + "avg2", + "avg(wr_fee)" + ], + "Estimated Cardinality": "47584" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "main.\"substring\"(memory.main.reason.r_reason_desc, 1, 20) ASC", + "avg(memory.main.web_sales.ws_quantity) ASC", + "avg(memory.main.web_returns.wr_refunded_cash) ASC", + "avg(memory.main.web_returns.wr_fee) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q86.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q86.slt.no new file mode 100644 index 00000000000..d23dd83cdda --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q86.slt.no @@ -0,0 +1,572 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT sum(ws_net_paid) AS total_sum , + i_category , + i_class , + grouping(i_category)+grouping(i_class) AS lochierarchy , + rank() OVER ( PARTITION BY grouping(i_category)+grouping(i_class), + CASE + WHEN grouping(i_class) = 0 THEN i_category + END + ORDER BY sum(ws_net_paid) DESC) AS rank_within_parent +FROM web_sales , + date_dim d1 , + item +WHERE d1.d_month_seq BETWEEN 1200 AND 1200+11 + AND d1.d_date_sk = ws_sold_date_sk + AND i_item_sk = ws_item_sk +GROUP BY rollup(i_category,i_class) +ORDER BY lochierarchy DESC NULLS FIRST, + CASE + WHEN grouping(i_category)+grouping(i_class) = 0 THEN i_category + END NULLS FIRST, + rank_within_parent NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_date_sk = ws_sold_date_sk)", + "(i_item_sk = ws_item_sk)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class" + ], + "Expressions": "sum(ws_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY (GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)), CASE WHEN ((GROUPING(memory.main.item.i_class) = CAST(0 AS BIGINT))) THEN (i_category) ELSE CAST(NULL AS VARCHAR) END ORDER BY sum(ws_net_paid) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Expressions": [ + "total_sum", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)) = CAST(0 AS BIGINT))) THEN (i_category) ELSE CAST(NULL AS VARCHAR) END" + ] + } + } + ], + "extra_info": { + "Order By": [ + "(GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class))", + "#[21.5]", + "rank() OVER (PARTITION BY (GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)), CASE WHEN ((GROUPING(memory.main.item.i_class) = 0)) THEN (memory.main.item.i_category) ELSE NULL END ORDER BY sum(memory.main.web_sales.ws_net_paid) DESC)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[21.0]", + "#[21.1]", + "#[21.2]", + "#[21.3]", + "#[21.4]" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_class", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class" + ], + "Expressions": "sum(ws_net_paid)", + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": "RANK() OVER (PARTITION BY (GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)), CASE WHEN ((GROUPING(memory.main.item.i_class) = 0)) THEN (i_category) ELSE NULL END ORDER BY sum(ws_net_paid) DESC NULLS LAST)", + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": [ + "total_sum", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)) = 0)) THEN (i_category) ELSE NULL END" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "i_item_sk", + "i_class", + "i_category" + ], + "Estimated Cardinality": "1800" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_class", + "ws_net_paid" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "sum(#2)", + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Projections": "RANK() OVER (PARTITION BY (GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)), CASE WHEN ((GROUPING(memory.main.item.i_class) = 0)) THEN (i_category) ELSE NULL END ORDER BY sum(ws_net_paid) DESC NULLS LAST)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7", + "#8", + "#9", + "#10" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Projections": [ + "total_sum", + "i_category", + "i_class", + "lochierarchy", + "rank_within_parent", + "CASE WHEN (((GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)) = 0)) THEN (i_category) ELSE NULL END" + ], + "Estimated Cardinality": "71631" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "(GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)) DESC", + "#5 ASC", + "rank() OVER (PARTITION BY (GROUPING(memory.main.item.i_category) + GROUPING(memory.main.item.i_class)), CASE WHEN ((GROUPING(memory.main.item.i_class) = 0)) THEN (memory.main.item.i_category) ELSE NULL END ORDER BY sum(memory.main.web_sales.ws_net_paid) DESC) ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q87.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q87.slt.no new file mode 100644 index 00000000000..6f895332c28 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q87.slt.no @@ -0,0 +1,1473 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT count(*) +FROM ((SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM store_sales, + date_dim, + customer + WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk + AND store_sales.ss_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11) + EXCEPT + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM catalog_sales, + date_dim, + customer + WHERE catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11) + EXCEPT + (SELECT DISTINCT c_last_name, + c_first_name, + d_date + FROM web_sales, + date_dim, + customer + WHERE web_sales.ws_sold_date_sk = date_dim.d_date_sk + AND web_sales.ws_bill_customer_sk = customer.c_customer_sk + AND d_month_seq BETWEEN 1200 AND 1200+11)) cool_cust ; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "EXCEPT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "EXCEPT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(ss_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(cs_bill_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_date_sk = d_date_sk)", + "(ws_bill_customer_sk = c_customer_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "EXCEPT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "EXCEPT", + "children": [ + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_customer_sk = c_customer_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "143657", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + }, + { + "name": "DISTINCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_bill_customer_sk = c_customer_sk)", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "71632", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "288464", + "Distinct Targets": [ + "c_last_name", + "c_first_name", + "d_date" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_customer_sk = c_customer_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_bill_customer_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": [ + "d_date_sk", + "d_date" + ], + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "c_customer_sk", + "c_first_name", + "c_last_name" + ], + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_bill_customer_sk = c_customer_sk", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": [ + "#0 IS NOT DISTINCT FROM #0", + "#1 IS NOT DISTINCT FROM #1", + "#2 IS NOT DISTINCT FROM #2" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "c_last_name", + "c_first_name", + "d_date" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": "", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q88.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q88.slt.no new file mode 100644 index 00000000000..2b3e030a88a --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q88.slt.no @@ -0,0 +1,3516 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * +FROM + (SELECT count(*) h8_30_to_9 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 8 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s1, + (SELECT count(*) h9_to_9_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 9 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s2, + (SELECT count(*) h9_30_to_10 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 9 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s3, + (SELECT count(*) h10_to_10_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 10 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s4, + (SELECT count(*) h10_30_to_11 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 10 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s5, + (SELECT count(*) h11_to_11_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 11 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s6, + (SELECT count(*) h11_30_to_12 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 11 + AND time_dim.t_minute >= 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s7, + (SELECT count(*) h12_to_12_30 + FROM store_sales, + household_demographics, + time_dim, + store + WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 12 + AND time_dim.t_minute < 30 + AND ((household_demographics.hd_dep_count = 4 + AND household_demographics.hd_vehicle_count<=4+2) + OR (household_demographics.hd_dep_count = 2 + AND household_demographics.hd_vehicle_count<=2+2) + OR (household_demographics.hd_dep_count = 0 + AND household_demographics.hd_vehicle_count<=0+2)) + AND store.s_store_name = 'ese') s8 ; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(8 AS BIGINT))", + "(t_minute >= CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h8_30_to_9" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(9 AS BIGINT))", + "(t_minute < CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h9_to_9_30" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(9 AS BIGINT))", + "(t_minute >= CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h9_30_to_10" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(10 AS BIGINT))", + "(t_minute < CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h10_to_10_30" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(10 AS BIGINT))", + "(t_minute >= CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h10_30_to_11" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(11 AS BIGINT))", + "(t_minute < CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h11_to_11_30" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(11 AS BIGINT))", + "(t_minute >= CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h11_30_to_12" + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(12 AS BIGINT))", + "(t_minute < CAST(30 AS BIGINT))", + "(((hd_dep_count = CAST(4 AS BIGINT)) AND (hd_vehicle_count <= (4 + 2))) OR ((hd_dep_count = CAST(2 AS BIGINT)) AND (hd_vehicle_count <= (2 + 2))) OR ((hd_dep_count = CAST(0 AS BIGINT)) AND (hd_vehicle_count <= (0 + 2))))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "h12_to_12_30" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "h8_30_to_9", + "h9_to_9_30", + "h9_30_to_10", + "h10_to_10_30", + "h10_30_to_11", + "h11_to_11_30", + "h11_30_to_12", + "h12_to_12_30" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 11i64)", + "($.t_minute >= 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h11_30_to_12", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 12i64)", + "($.t_minute < 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h12_to_12_30", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 11i64)", + "($.t_minute < 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h11_to_11_30", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 10i64)", + "($.t_minute >= 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h10_30_to_11", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 10i64)", + "($.t_minute < 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h10_to_10_30", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 9i64)", + "($.t_minute >= 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h9_30_to_10", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 9i64)", + "($.t_minute < 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h9_to_9_30", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 8i64)", + "($.t_minute >= 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "h8_30_to_9", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "h8_30_to_9", + "h9_to_9_30", + "h9_30_to_10", + "h10_to_10_30", + "h10_30_to_11", + "h11_to_11_30", + "h11_30_to_12", + "h12_to_12_30" + ], + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=11", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=12", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=11", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=10", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=10", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=9", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=9", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=8", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(((($.hd_dep_count = 4i64) and ($.hd_vehicle_count <= 6i32)) or (($.hd_dep_count = 2i64) and ($.hd_vehicle_count <= 4i32))) or (($.hd_dep_count = 0i64) and ($.hd_vehicle_count <= 2i32)))", + "((($.hd_dep_count = 4i64) or ($.hd_dep_count = 2i64)) or ($.hd_dep_count = 0i64))", + "((($.hd_vehicle_count <= 6i32) or ($.hd_vehicle_count <= 4i32)) or ($.hd_vehicle_count <= 2i32))" + ], + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "h8_30_to_9", + "h9_to_9_30", + "h9_30_to_10", + "h10_to_10_30", + "h10_30_to_11", + "h11_to_11_30", + "h11_30_to_12", + "h12_to_12_30" + ], + "Estimated Cardinality": "1" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q89.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q89.slt.no new file mode 100644 index 00000000000..051d489cbef --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q89.slt.no @@ -0,0 +1,856 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT * from + (SELECT i_category, i_class, i_brand, s_store_name, s_company_name, d_moy, sum(ss_sales_price) sum_sales, avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name) avg_monthly_sales + FROM item, store_sales, date_dim, store + WHERE ss_item_sk = i_item_sk + AND ss_sold_date_sk = d_date_sk + AND ss_store_sk = s_store_sk + AND d_year = 1999 + AND ((i_category IN ('Books','Electronics','Sports') + AND i_class IN ('computers','stereo','football') ) + OR (i_category IN ('Men','Jewelry','Women') + AND i_class IN ('shirts','birdal','dresses'))) + GROUP BY i_category, i_class, i_brand, s_store_name, s_company_name, d_moy) tmp1 +WHERE CASE + WHEN (avg_monthly_sales <> 0) THEN (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) + ELSE NULL + END > 0.1 +ORDER BY sum_sales - avg_monthly_sales, + s_store_name, 1, 2, 3, 5, 6, 7, 8 +LIMIT 100; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(ss_sold_date_sk = d_date_sk)", + "(ss_store_sk = s_store_sk)", + "(d_year = CAST(1999 AS BIGINT))", + "(((i_category IN (CAST('Books' AS VARCHAR), CAST('Electronics' AS VARCHAR), CAST('Sports' AS VARCHAR))) AND (i_class IN (CAST('computers' AS VARCHAR), CAST('stereo' AS VARCHAR), CAST('football' AS VARCHAR)))) OR ((i_category IN (CAST('Men' AS VARCHAR), CAST('Jewelry' AS VARCHAR), CAST('Women' AS VARCHAR))) AND (i_class IN (CAST('shirts' AS VARCHAR), CAST('birdal' AS VARCHAR), CAST('dresses' AS VARCHAR)))))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales != CAST(0 AS DOUBLE))) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE CAST(NULL AS DOUBLE) END > CAST(0.1 AS DOUBLE))" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ] + } + } + ], + "extra_info": { + "Order By": [ + "#[34.8]", + "tmp1.s_store_name", + "i_category", + "i_class", + "i_brand", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "#[34.0]", + "#[34.1]", + "#[34.2]", + "#[34.3]", + "#[34.4]", + "#[34.5]", + "#[34.6]", + "#[34.7]" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1999i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_name", + "s_company_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "57677" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((vortex.list.contains([\"Books\", \"Electronics\", \"Sports\"], $.i_category) and vortex.list.contains([\"computers\", \"stereo\", \"football\"], $.i_class)) or (vortex.list.contains([\"Men\", \"Jewelry\", \"Women\"], $.i_category) and vortex.list.contains([\"shirts\", \"birdal\", \"dresses\"], $.i_class)))", + "(vortex.list.contains([\"Books\", \"Electronics\", \"Sports\"], $.i_category) or vortex.list.contains([\"Men\", \"Jewelry\", \"Women\"], $.i_category))", + "(vortex.list.contains([\"computers\", \"stereo\", \"football\"], $.i_class) or vortex.list.contains([\"shirts\", \"birdal\", \"dresses\"], $.i_class))" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy" + ], + "Expressions": "sum(ss_sales_price)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_decompress_integral_bigint(#5, 1)", + "#6" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "(CASE WHEN ((avg_monthly_sales != 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_store_sk", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "d_year=1999", + "Projections": [ + "d_date_sk", + "d_moy" + ], + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "s_store_sk", + "s_store_name", + "s_company_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "57677" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "((vortex.list.contains([\"Books\", \"Electronics\", \"Sports\"], $.i_category) and vortex.list.contains([\"computers\", \"stereo\", \"football\"], $.i_class)) or (vortex.list.contains([\"Men\", \"Jewelry\", \"Women\"], $.i_category) and vortex.list.contains([\"shirts\", \"birdal\", \"dresses\"], $.i_class)))", + "(vortex.list.contains([\"Books\", \"Electronics\", \"Sports\"], $.i_category) or vortex.list.contains([\"Men\", \"Jewelry\", \"Women\"], $.i_category))", + "(vortex.list.contains([\"computers\", \"stereo\", \"football\"], $.i_class) or vortex.list.contains([\"shirts\", \"birdal\", \"dresses\"], $.i_class))" + ], + "Projections": [ + "i_item_sk", + "i_brand", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "__internal_compress_integral_utinyint(#1, 1)", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "ss_sales_price" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Aggregates": "sum(#6)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "__internal_decompress_integral_bigint(#5, 1)", + "#6" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": "avg(sum(ss_sales_price)) OVER (PARTITION BY i_category, i_brand, s_store_name, s_company_name)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Expression": "(CASE WHEN ((avg_monthly_sales != 0.0)) THEN ((abs((CAST(sum_sales AS DOUBLE) - avg_monthly_sales)) / avg_monthly_sales)) ELSE NULL END > 0.1)", + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Projections": [ + "i_category", + "i_class", + "i_brand", + "s_store_name", + "s_company_name", + "d_moy", + "sum_sales", + "avg_monthly_sales", + "(CAST(sum_sales AS DOUBLE) - avg_monthly_sales)" + ], + "Estimated Cardinality": "57677" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "#8 ASC", + "tmp1.s_store_name ASC", + "i_category ASC", + "i_class ASC", + "i_brand ASC", + "s_company_name ASC", + "d_moy ASC", + "sum_sales ASC", + "avg_monthly_sales ASC" + ] + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6", + "#7" + ], + "Estimated Cardinality": "100" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q9.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q9.slt.no new file mode 100644 index 00000000000..d77172efed7 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q9.slt.no @@ -0,0 +1,3713 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) > 74129 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 1 AND 20) + END bucket1, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) > 122840 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 21 AND 40) + END bucket2, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) > 56580 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 41 AND 60) + END bucket3, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) > 10097 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 61 AND 80) + END bucket4, + CASE + WHEN + (SELECT count(*) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) > 165306 THEN + (SELECT avg(ss_ext_discount_amt) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) + ELSE + (SELECT avg(ss_net_paid) + FROM store_sales + WHERE ss_quantity BETWEEN 81 AND 100) + END bucket5 +FROM reason +WHERE r_reason_sk = 1 ; +---- +logical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "r_reason_sk", + "r_reason_id", + "r_reason_desc" + ] + } + } + ], + "extra_info": { + "Expressions": "(r_reason_sk = CAST(1 AS BIGINT))" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(1 AS BIGINT))", + "(ss_quantity <= CAST(20 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[20.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[208.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[208.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(1 AS BIGINT))", + "(ss_quantity <= CAST(20 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[33.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[211.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[211.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(1 AS BIGINT))", + "(ss_quantity <= CAST(20 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[46.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[214.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[214.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(21 AS BIGINT))", + "(ss_quantity <= CAST(40 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[59.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[217.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[217.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(21 AS BIGINT))", + "(ss_quantity <= CAST(40 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[72.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[220.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[220.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(21 AS BIGINT))", + "(ss_quantity <= CAST(40 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[85.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[223.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[223.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(41 AS BIGINT))", + "(ss_quantity <= CAST(60 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[98.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[226.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[226.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(41 AS BIGINT))", + "(ss_quantity <= CAST(60 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[111.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[229.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[229.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(41 AS BIGINT))", + "(ss_quantity <= CAST(60 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[124.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[232.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[232.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(61 AS BIGINT))", + "(ss_quantity <= CAST(80 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[137.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[235.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[235.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(61 AS BIGINT))", + "(ss_quantity <= CAST(80 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[150.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[238.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[238.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(61 AS BIGINT))", + "(ss_quantity <= CAST(80 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[163.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[241.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[241.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(81 AS BIGINT))", + "(ss_quantity <= CAST(100 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[176.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[244.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[244.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(81 AS BIGINT))", + "(ss_quantity <= CAST(100 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[189.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[247.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[247.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_quantity >= CAST(81 AS BIGINT))", + "(ss_quantity <= CAST(100 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#[202.0])", + "count_star()" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#[250.1] > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #[250.0] END" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "bucket1", + "bucket2", + "bucket3", + "bucket4", + "bucket5" + ] + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "avg(ss_net_paid)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "\"first\"(#0)", + "count_star()" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.r_reason_sk = 1i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "42", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "bucket1", + "bucket2", + "bucket3", + "bucket4", + "bucket5" + ], + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Projections": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(61i64 <= $.ss_quantity <= 80i64)", + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Projections": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(81i64 <= $.ss_quantity <= 100i64)", + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": {} + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Projections": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(21i64 <= $.ss_quantity <= 40i64)", + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(41i64 <= $.ss_quantity <= 60i64)", + "Projections": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_ext_discount_amt", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "ss_net_paid", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "avg(#0)" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + }, + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(1i64 <= $.ss_quantity <= 20i64)", + "Projections": "", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "57692" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Aggregates": [ + "\"first\"(#0)", + "count_star()" + ] + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#1 > 1)) THEN (\"error\"('More than one row returned by a subquery used as an expression - scalar subqueries can only return a single row.", + "Use \"SET scalar_subquery_error_on_multiple_rows=false\" to revert to previous behavior of returning a random row.')) ELSE #0 END" + ], + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "r_reason_sk=1", + "Projections": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": "42", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": {} + } + ], + "extra_info": {} + } + ], + "extra_info": {} + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": [ + "bucket1", + "bucket2", + "bucket3", + "bucket4", + "bucket5" + ], + "Estimated Cardinality": "1" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q90.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q90.slt.no new file mode 100644 index 00000000000..bb1a0361379 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q90.slt.no @@ -0,0 +1,929 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT case when pmc=0 then null else cast(amc AS decimal(15,4))/cast(pmc AS decimal(15,4)) end am_pm_ratio +FROM + (SELECT count(*) amc + FROM web_sales, + household_demographics, + time_dim, + web_page + WHERE ws_sold_time_sk = time_dim.t_time_sk + AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk + AND ws_web_page_sk = web_page.wp_web_page_sk + AND time_dim.t_hour BETWEEN 8 AND 8+1 + AND household_demographics.hd_dep_count = 6 + AND web_page.wp_char_count BETWEEN 5000 AND 5200) "at", + (SELECT count(*) pmc + FROM web_sales, + household_demographics, + time_dim, + web_page + WHERE ws_sold_time_sk = time_dim.t_time_sk + AND ws_ship_hdemo_sk = household_demographics.hd_demo_sk + AND ws_web_page_sk = web_page.wp_web_page_sk + AND time_dim.t_hour BETWEEN 19 AND 19+1 + AND household_demographics.hd_dep_count = 6 + AND web_page.wp_char_count BETWEEN 5000 AND 5200) pt +ORDER BY am_pm_ratio +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "wp_web_page_id", + "wp_rec_start_date", + "wp_rec_end_date", + "wp_creation_date_sk", + "wp_access_date_sk", + "wp_autogen_flag", + "wp_customer_sk", + "wp_url", + "wp_type", + "wp_char_count", + "wp_link_count", + "wp_image_count", + "wp_max_ad_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_time_sk = t_time_sk)", + "(ws_ship_hdemo_sk = hd_demo_sk)", + "(ws_web_page_sk = wp_web_page_sk)", + "(t_hour >= CAST(8 AS BIGINT))", + "(hd_dep_count = CAST(6 AS BIGINT))", + "(wp_char_count >= CAST(5000 AS BIGINT))", + "(t_hour <= CAST((8 + 1) AS BIGINT))", + "(wp_char_count <= CAST(5200 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "amc" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wp_web_page_sk", + "wp_web_page_id", + "wp_rec_start_date", + "wp_rec_end_date", + "wp_creation_date_sk", + "wp_access_date_sk", + "wp_autogen_flag", + "wp_customer_sk", + "wp_url", + "wp_type", + "wp_char_count", + "wp_link_count", + "wp_image_count", + "wp_max_ad_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_sold_time_sk = t_time_sk)", + "(ws_ship_hdemo_sk = hd_demo_sk)", + "(ws_web_page_sk = wp_web_page_sk)", + "(t_hour >= CAST(19 AS BIGINT))", + "(hd_dep_count = CAST(6 AS BIGINT))", + "(wp_char_count >= CAST(5000 AS BIGINT))", + "(t_hour <= CAST((19 + 1) AS BIGINT))", + "(wp_char_count <= CAST(5200 AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "pmc" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "am_pm_ratio" + } + } + ], + "extra_info": { + "Order By": "CASE WHEN ((pt.pmc = 0)) THEN (NULL) ELSE (CAST(\"at\".amc AS DECIMAL(15, 4)) / CAST(pt.pmc AS DECIMAL(15, 4))) END" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_time_sk", + "ws_ship_hdemo_sk", + "ws_web_page_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.hd_dep_count = 6i64)", + "($.hd_demo_sk >= 2i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(8i64 <= $.t_hour <= 9i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(5000i64 <= $.wp_char_count <= 5200i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "wp_web_page_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "amc", + "Estimated Cardinality": "1" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_time_sk", + "ws_ship_hdemo_sk", + "ws_web_page_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.hd_dep_count = 6i64)", + "($.hd_demo_sk >= 2i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(19i64 <= $.t_hour <= 20i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "(5000i64 <= $.wp_char_count <= 5200i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "wp_web_page_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_page_sk = wp_web_page_sk)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "pmc", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "am_pm_ratio", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_time_sk", + "ws_ship_hdemo_sk", + "ws_web_page_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "hd_dep_count=6", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(8i64 <= $.t_hour <= 9i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Projections": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_time_sk = t_time_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(5000i64 <= $.wp_char_count <= 5200i64)", + "Projections": "wp_web_page_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + }, + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_time_sk", + "ws_ship_hdemo_sk", + "ws_web_page_sk" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "hd_dep_count=6", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(19i64 <= $.t_hour <= 20i64)", + "(46i64 <= $.t_time_sk <= 86203i64)" + ], + "Projections": "t_time_sk", + "Estimated Cardinality": "17280" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_time_sk = t_time_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "(5000i64 <= $.wp_char_count <= 5200i64)", + "Projections": "wp_web_page_sk", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_page_sk = wp_web_page_sk", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": {} + } + ], + "extra_info": { + "Projections": "am_pm_ratio", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "CASE WHEN ((pt.pmc = 0)) THEN (NULL) ELSE (CAST(\"at\".amc AS DECIMAL(15, 4)) / CAST(pt.pmc AS DECIMAL(15, 4))) END ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q91.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q91.slt.no new file mode 100644 index 00000000000..5a04229f331 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q91.slt.no @@ -0,0 +1,857 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT cc_call_center_id Call_Center, + cc_name Call_Center_Name, + cc_manager Manager, + sum(cr_net_loss) Returns_Loss +FROM call_center, + catalog_returns, + date_dim, + customer, + customer_address, + customer_demographics, + household_demographics +WHERE cr_call_center_sk = cc_call_center_sk + AND cr_returned_date_sk = d_date_sk + AND cr_returning_customer_sk= c_customer_sk + AND cd_demo_sk = c_current_cdemo_sk + AND hd_demo_sk = c_current_hdemo_sk + AND ca_address_sk = c_current_addr_sk + AND d_year = 1998 + AND d_moy = 11 + AND ((cd_marital_status = 'M' + AND cd_education_status = 'Unknown') or(cd_marital_status = 'W' + AND cd_education_status = 'Advanced Degree')) + AND hd_buy_potential LIKE 'Unknown%' + AND ca_gmt_offset = -7 +GROUP BY cc_call_center_id, + cc_name, + cc_manager, + cd_marital_status, + cd_education_status +ORDER BY sum(cr_net_loss) DESC; +---- +logical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_rec_start_date", + "cc_rec_end_date", + "cc_closed_date_sk", + "cc_open_date_sk", + "cc_name", + "cc_class", + "cc_employees", + "cc_sq_ft", + "cc_hours", + "cc_manager", + "cc_mkt_id", + "cc_mkt_class", + "cc_mkt_desc", + "cc_market_manager", + "cc_division", + "cc_division_name", + "cc_company", + "cc_company_name", + "cc_street_number", + "cc_street_name", + "cc_street_type", + "cc_suite_number", + "cc_city", + "cc_county", + "cc_state", + "cc_zip", + "cc_country", + "cc_gmt_offset", + "cc_tax_percentage" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returned_time_sk", + "cr_item_sk", + "cr_refunded_customer_sk", + "cr_refunded_cdemo_sk", + "cr_refunded_hdemo_sk", + "cr_refunded_addr_sk", + "cr_returning_customer_sk", + "cr_returning_cdemo_sk", + "cr_returning_hdemo_sk", + "cr_returning_addr_sk", + "cr_call_center_sk", + "cr_catalog_page_sk", + "cr_ship_mode_sk", + "cr_warehouse_sk", + "cr_reason_sk", + "cr_order_number", + "cr_return_quantity", + "cr_return_amount", + "cr_return_tax", + "cr_return_amt_inc_tax", + "cr_fee", + "cr_return_ship_cost", + "cr_refunded_cash", + "cr_reversed_charge", + "cr_store_credit", + "cr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_customer_id", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk", + "c_first_shipto_date_sk", + "c_first_sales_date_sk", + "c_salutation", + "c_first_name", + "c_last_name", + "c_preferred_cust_flag", + "c_birth_day", + "c_birth_month", + "c_birth_year", + "c_birth_country", + "c_login", + "c_email_address", + "c_last_review_date_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_gender", + "cd_marital_status", + "cd_education_status", + "cd_purchase_estimate", + "cd_credit_rating", + "cd_dep_count", + "cd_dep_employed_count", + "cd_dep_college_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cr_call_center_sk = cc_call_center_sk)", + "(cr_returned_date_sk = d_date_sk)", + "(cr_returning_customer_sk = c_customer_sk)", + "(cd_demo_sk = c_current_cdemo_sk)", + "(hd_demo_sk = c_current_hdemo_sk)", + "(ca_address_sk = c_current_addr_sk)", + "(d_year = CAST(1998 AS BIGINT))", + "(d_moy = CAST(11 AS BIGINT))", + "(((cd_marital_status = CAST('M' AS VARCHAR)) AND (cd_education_status = CAST('Unknown' AS VARCHAR))) OR ((cd_marital_status = CAST('W' AS VARCHAR)) AND (cd_education_status = CAST('Advanced Degree' AS VARCHAR))))", + "(hd_buy_potential ~~ 'Unknown%')", + "(CAST(ca_gmt_offset AS DECIMAL(12,2)) = CAST(-7 AS DECIMAL(12,2)))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "cc_call_center_id", + "cc_name", + "cc_manager", + "cd_marital_status", + "cd_education_status" + ], + "Expressions": "sum(cr_net_loss)" + } + } + ], + "extra_info": { + "Expressions": [ + "Call_Center", + "Call_Center_Name", + "Manager", + "Returns_Loss" + ] + } + } + ], + "extra_info": { + "Order By": "sum(memory.main.catalog_returns.cr_net_loss)" + } + } +] +logical_opt [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "((($.cd_marital_status = \"M\") and ($.cd_education_status = \"Unknown\")) or (($.cd_marital_status = \"W\") and ($.cd_education_status = \"Advanced Degree\")))", + "(($.cd_marital_status = \"M\") or ($.cd_marital_status = \"W\"))", + "(($.cd_education_status = \"Unknown\") or ($.cd_education_status = \"Advanced Degree\"))", + "(7i64 <= $.cd_demo_sk <= 192051i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "38416" + } + } + ], + "extra_info": { + "Expressions": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "38416" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "$.hd_buy_potential like \"Unknown%\"", + "Function": "Vortex Scan", + "Estimated Cardinality": "1440" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "14275" + } + } + ], + "extra_info": { + "Expressions": [ + "cr_returned_date_sk", + "cr_returning_customer_sk", + "cr_call_center_sk", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.c_customer_sk >= 2i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "10000" + } + } + ], + "extra_info": { + "Expressions": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.ca_gmt_offset = decimal128(-700, precision=5, scale=2))", + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(c_current_addr_sk = ca_address_sk)", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_returning_customer_sk = c_customer_sk)", + "Estimated Cardinality": "2855" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.d_year = 1998i64)", + "($.d_moy = 11i64)", + "(2450852i64 <= $.d_date_sk <= 2452907i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_returned_date_sk = d_date_sk)", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(hd_demo_sk = c_current_hdemo_sk)", + "Estimated Cardinality": "584" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_name", + "cc_manager" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cr_call_center_sk = cc_call_center_sk)", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cd_demo_sk = c_current_cdemo_sk)", + "Estimated Cardinality": "2244" + } + } + ], + "extra_info": { + "Groups": [ + "cc_call_center_id", + "cc_name", + "cc_manager", + "cd_marital_status", + "cd_education_status" + ], + "Expressions": "sum(cr_net_loss)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Expressions": [ + "Call_Center", + "Call_Center_Name", + "Manager", + "Returns_Loss" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Order By": "sum(memory.main.catalog_returns.cr_net_loss)" + } + } +] +physical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "((($.cd_marital_status = \"M\") and ($.cd_education_status = \"Unknown\")) or (($.cd_marital_status = \"W\") and ($.cd_education_status = \"Advanced Degree\")))", + "(($.cd_marital_status = \"M\") or ($.cd_marital_status = \"W\"))", + "(($.cd_education_status = \"Unknown\") or ($.cd_education_status = \"Advanced Degree\"))", + "(7i64 <= $.cd_demo_sk <= 192051i64)" + ], + "Projections": [ + "cd_demo_sk", + "cd_marital_status", + "cd_education_status" + ], + "Estimated Cardinality": "38416" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "$.hd_buy_potential like \"Unknown%\"", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "1440" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cr_returned_date_sk", + "cr_returning_customer_sk", + "cr_call_center_sk", + "cr_net_loss" + ], + "Estimated Cardinality": "14275" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "($.c_customer_sk >= 2i64)", + "Projections": [ + "c_customer_sk", + "c_current_cdemo_sk", + "c_current_hdemo_sk", + "c_current_addr_sk" + ], + "Estimated Cardinality": "10000" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_gmt_offset=-7.00", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "c_current_addr_sk = ca_address_sk", + "Estimated Cardinality": "2000" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_returning_customer_sk = c_customer_sk", + "Estimated Cardinality": "2855" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "d_year=1998", + "d_moy=11" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "2921" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_returned_date_sk = d_date_sk", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "hd_demo_sk = c_current_hdemo_sk", + "Estimated Cardinality": "584" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_name", + "cc_manager" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cr_call_center_sk = cc_call_center_sk", + "Estimated Cardinality": "584" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cd_demo_sk = c_current_cdemo_sk", + "Estimated Cardinality": "2244" + } + } + ], + "extra_info": { + "Projections": [ + "cc_call_center_id", + "cc_name", + "cc_manager", + "cd_marital_status", + "cd_education_status", + "cr_net_loss" + ], + "Estimated Cardinality": "2244" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "sum(#5)", + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Projections": [ + "Call_Center", + "Call_Center_Name", + "Manager", + "Returns_Loss" + ], + "Estimated Cardinality": "0" + } + } + ], + "extra_info": { + "Order By": "sum(memory.main.catalog_returns.cr_net_loss) DESC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q92.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q92.slt.no new file mode 100644 index 00000000000..03adc1f638c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q92.slt.no @@ -0,0 +1,865 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT sum(ws_ext_discount_amt) AS "Excess Discount Amount" +FROM web_sales, + item, + date_dim +WHERE i_manufact_id = 350 + AND i_item_sk = ws_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = ws_sold_date_sk + AND ws_ext_discount_amt > + (SELECT 1.3 * avg(ws_ext_discount_amt) + FROM web_sales, + date_dim + WHERE ws_item_sk = i_item_sk + AND d_date BETWEEN '2000-01-27' AND cast('2000-04-26' AS date) + AND d_date_sk = ws_sold_date_sk ) +ORDER BY sum(ws_ext_discount_amt) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_item_sk = i_item_sk)", + "(d_date >= CAST('2000-01-27' AS DATE))", + "(d_date_sk = ws_sold_date_sk)", + "(d_date <= CAST('2000-04-26' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "avg(ws_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(1.3 AS DOUBLE) * avg(ws_ext_discount_amt))" + } + } + ], + "extra_info": { + "Join Type": "SINGLE", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(i_manufact_id = CAST(350 AS BIGINT))", + "(i_item_sk = ws_item_sk)", + "(d_date >= CAST('2000-01-27' AS DATE))", + "(d_date_sk = ws_sold_date_sk)", + "(CAST(ws_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "(d_date <= CAST('2000-04-26' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ws_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "Excess Discount Amount" + } + } + ], + "extra_info": { + "Order By": "sum(memory.main.web_sales.ws_ext_discount_amt)" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_discount_amt" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.i_manufact_id = 350i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Expressions": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_discount_amt" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_item_sk = i_item_sk)", + "Estimated Cardinality": "12984" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Groups": "i_item_sk", + "Expressions": "avg(ws_ext_discount_amt)", + "Estimated Cardinality": "6492" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "6492" + } + } + ], + "extra_info": { + "Expressions": [ + "(1.3 * avg(ws_ext_discount_amt))", + "i_item_sk" + ], + "Estimated Cardinality": "6492" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "(i_item_sk IS NOT DISTINCT FROM i_item_sk)" + } + } + ], + "extra_info": { + "Expressions": "(CAST(ws_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "sum(ws_ext_discount_amt)", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "Excess Discount Amount", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_discount_amt" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "i_manufact_id=350", + "Projections": "i_item_sk", + "Estimated Cardinality": "72" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "0" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PERFECT_HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_sold_date_sk", + "ws_item_sk", + "ws_ext_discount_amt" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_item_sk = i_item_sk", + "Estimated Cardinality": "12984" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(2000-01-27 <= $.d_date <= 2000-04-26)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_sold_date_sk = d_date_sk", + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_sk", + "ws_ext_discount_amt" + ], + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "avg(#1)" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "6492" + } + } + ], + "extra_info": { + "Projections": [ + "(1.3 * avg(ws_ext_discount_amt))", + "i_item_sk" + ], + "Estimated Cardinality": "6492" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_item_sk IS NOT DISTINCT FROM i_item_sk", + "Estimated Cardinality": "0" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "12984" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": "i_item_sk IS NOT DISTINCT FROM i_item_sk", + "Estimated Cardinality": "0", + "Delim Index": "1" + } + } + ], + "extra_info": { + "Expression": "(CAST(ws_ext_discount_amt AS DOUBLE) > SUBQUERY)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": "#0", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Projections": "ws_ext_discount_amt", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Aggregates": "sum(#0)" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "sum(memory.main.web_sales.ws_ext_discount_amt) ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q93.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q93.slt.no new file mode 100644 index 00000000000..75201ef4165 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q93.slt.no @@ -0,0 +1,482 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT ss_customer_sk, + sum(act_sales) sumsales +FROM + (SELECT ss_item_sk, + ss_ticket_number, + ss_customer_sk, + CASE + WHEN sr_return_quantity IS NOT NULL THEN (ss_quantity-sr_return_quantity)*ss_sales_price + ELSE (ss_quantity*ss_sales_price) + END act_sales + FROM store_sales + LEFT OUTER JOIN store_returns ON (sr_item_sk = ss_item_sk + AND sr_ticket_number = ss_ticket_number) ,reason + WHERE sr_reason_sk = r_reason_sk + AND r_reason_desc = 'reason 28') t +GROUP BY ss_customer_sk +ORDER BY sumsales NULLS FIRST, + ss_customer_sk NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_returned_date_sk", + "sr_return_time_sk", + "sr_item_sk", + "sr_customer_sk", + "sr_cdemo_sk", + "sr_hdemo_sk", + "sr_addr_sk", + "sr_store_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity", + "sr_return_amt", + "sr_return_tax", + "sr_return_amt_inc_tax", + "sr_fee", + "sr_return_ship_cost", + "sr_refunded_cash", + "sr_reversed_charge", + "sr_store_credit", + "sr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "r_reason_sk", + "r_reason_id", + "r_reason_desc" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(sr_reason_sk = r_reason_sk)", + "(r_reason_desc = CAST('reason 28' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ss_item_sk", + "ss_ticket_number", + "ss_customer_sk", + "act_sales" + ] + } + } + ], + "extra_info": { + "Groups": "ss_customer_sk", + "Expressions": "sum(act_sales)" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_customer_sk", + "sumsales" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sum(t.act_sales)", + "t.ss_customer_sk" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_item_sk", + "ss_customer_sk", + "ss_ticket_number", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Expressions": [ + "sr_item_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "(ss_item_sk = sr_item_sk)", + "(ss_ticket_number = sr_ticket_number)" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(sr_reason_sk = r_reason_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_customer_sk", + "act_sales" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "ss_customer_sk", + "Expressions": "sum(act_sales)", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_customer_sk", + "sumsales" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_item_sk", + "ss_customer_sk", + "ss_ticket_number", + "ss_quantity", + "ss_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sr_item_sk", + "sr_reason_sk", + "sr_ticket_number", + "sr_return_quantity" + ], + "Estimated Cardinality": "28576" + } + } + ], + "extra_info": { + "Join Type": "LEFT", + "Conditions": [ + "ss_item_sk = sr_item_sk", + "ss_ticket_number = sr_ticket_number" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "sr_reason_sk = r_reason_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_customer_sk", + "act_sales" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_customer_sk", + "act_sales" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": "#0", + "Aggregates": "sum(#1)", + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "#1" + ], + "Estimated Cardinality": "182344" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sum(t.act_sales) ASC", + "t.ss_customer_sk ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q94.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q94.slt.no new file mode 100644 index 00000000000..c5acf30049c --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q94.slt.no @@ -0,0 +1,1027 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT count(DISTINCT ws_order_number) AS "order count" , + sum(ws_ext_ship_cost) AS "total shipping cost" , + sum(ws_net_profit) AS "total net profit" +FROM web_sales ws1 , + date_dim , + customer_address , + web_site +WHERE d_date BETWEEN '1999-02-01' AND cast('1999-04-02' AS date) + AND ws1.ws_ship_date_sk = d_date_sk + AND ws1.ws_ship_addr_sk = ca_address_sk + AND ca_state = 'IL' + AND ws1.ws_web_site_sk = web_site_sk + AND web_company_name = 'pri' + AND EXISTS + (SELECT * + FROM web_sales ws2 + WHERE ws1.ws_order_number = ws2.ws_order_number + AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) + AND NOT exists + (SELECT * + FROM web_returns wr1 + WHERE ws1.ws_order_number = wr1.wr_order_number) +ORDER BY count(DISTINCT ws_order_number) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "DEPENDENT_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id", + "web_rec_start_date", + "web_rec_end_date", + "web_name", + "web_open_date_sk", + "web_close_date_sk", + "web_class", + "web_manager", + "web_mkt_id", + "web_mkt_class", + "web_mkt_desc", + "web_market_manager", + "web_company_id", + "web_company_name", + "web_street_number", + "web_street_name", + "web_street_type", + "web_suite_number", + "web_city", + "web_county", + "web_state", + "web_zip", + "web_country", + "web_gmt_offset", + "web_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_order_number = ws_order_number)", + "(ws_warehouse_sk != ws_warehouse_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Expressions": "(ws_order_number = wr_order_number)" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date >= CAST('1999-02-01' AS DATE))", + "(ws_ship_date_sk = d_date_sk)", + "(ws_ship_addr_sk = ca_address_sk)", + "(ca_state = CAST('IL' AS VARCHAR))", + "(ws_web_site_sk = web_site_sk)", + "(web_company_name = CAST('pri' AS VARCHAR))", + "SUBQUERY", + "(NOT SUBQUERY)", + "(d_date <= CAST('1999-04-02' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT ws_order_number)", + "sum(ws_ext_ship_cost)", + "sum(ws_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ] + } + } + ], + "extra_info": { + "Order By": "count(DISTINCT ws1.ws_order_number)" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "DELIM_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "14325" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ws_order_number = ws_order_number)", + "(ws_warehouse_sk != ws_warehouse_sk)" + ], + "Estimated Cardinality": "594926" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "594926" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "594926" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_ship_date_sk", + "ws_ship_addr_sk", + "ws_web_site_sk", + "ws_warehouse_sk", + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.ca_state = \"IL\")", + "($.ca_address_sk <= 4998i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_addr_sk = ca_address_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999-02-01 <= $.d_date <= 1999-04-02)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_date_sk = d_date_sk)", + "Estimated Cardinality": "14326" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_site_sk = web_site_sk)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "(ws_warehouse_sk IS NOT DISTINCT FROM ws_warehouse_sk)", + "(ws_order_number IS NOT DISTINCT FROM ws_order_number)" + ], + "Estimated Cardinality": "2865" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + }, + { + "name": "DELIM_GET", + "children": [], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(wr_order_number = ws_order_number)", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "(ws_order_number IS NOT DISTINCT FROM ws_order_number)", + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT ws_order_number)", + "sum(ws_ext_ship_cost)", + "sum(ws_net_profit)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LEFT_DELIM_JOIN", + "children": [ + { + "name": "RIGHT_DELIM_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_ship_date_sk", + "ws_ship_addr_sk", + "ws_web_site_sk", + "ws_warehouse_sk", + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_state='IL'", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_addr_sk = ca_address_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999-02-01 <= $.d_date <= 1999-04-02)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_date_sk = d_date_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_site_sk = web_site_sk", + "Estimated Cardinality": "14326" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "1", + "Estimated Cardinality": "14325" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ws_order_number = ws_order_number", + "ws_warehouse_sk != ws_warehouse_sk" + ], + "Estimated Cardinality": "594926" + } + } + ], + "extra_info": { + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "594926" + } + }, + { + "name": "DUMMY_SCAN", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "ws_warehouse_sk IS NOT DISTINCT FROM ws_warehouse_sk", + "ws_order_number IS NOT DISTINCT FROM ws_order_number" + ], + "Estimated Cardinality": "2865" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "", + "Estimated Cardinality": "14325" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": [ + "ws_warehouse_sk IS NOT DISTINCT FROM ws_warehouse_sk", + "ws_order_number IS NOT DISTINCT FROM ws_order_number" + ], + "Estimated Cardinality": "2865", + "Delim Index": "1" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "COLUMN_DATA_SCAN", + "children": [], + "extra_info": { + "Estimated Cardinality": "573" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "wr_order_number", + "Estimated Cardinality": "7037" + } + }, + { + "name": "DELIM_SCAN", + "children": [], + "extra_info": { + "Delim Index": "2", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "wr_order_number = ws_order_number", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Projections": "ws_order_number", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "ws_order_number IS NOT DISTINCT FROM ws_order_number", + "Estimated Cardinality": "573" + } + }, + { + "name": "HASH_GROUP_BY", + "children": [], + "extra_info": { + "Groups": "#0", + "Aggregates": "", + "Estimated Cardinality": "2808" + } + } + ], + "extra_info": { + "Join Type": "ANTI", + "Conditions": "ws_order_number IS NOT DISTINCT FROM ws_order_number", + "Estimated Cardinality": "573", + "Delim Index": "2" + } + } + ], + "extra_info": { + "Projections": [ + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Aggregates": [ + "count(DISTINCT #0)", + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "count(DISTINCT ws1.ws_order_number) ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q95.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q95.slt.no new file mode 100644 index 00000000000..2992fc6099d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q95.slt.no @@ -0,0 +1,1142 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ws_wh AS + (SELECT ws1.ws_order_number, + ws1.ws_warehouse_sk wh1, + ws2.ws_warehouse_sk wh2 + FROM web_sales ws1, + web_sales ws2 + WHERE ws1.ws_order_number = ws2.ws_order_number + AND ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) +SELECT count(DISTINCT ws_order_number) AS "order count" , + sum(ws_ext_ship_cost) AS "total shipping cost" , + sum(ws_net_profit) AS "total net profit" +FROM web_sales ws1 , + date_dim , + customer_address , + web_site +WHERE d_date BETWEEN '1999-02-01' AND cast('1999-04-02' AS date) + AND ws1.ws_ship_date_sk = d_date_sk + AND ws1.ws_ship_addr_sk = ca_address_sk + AND ca_state = 'IL' + AND ws1.ws_web_site_sk = web_site_sk + AND web_company_name = 'pri' + AND ws1.ws_order_number IN + (SELECT ws_order_number + FROM ws_wh) + AND ws1.ws_order_number IN + (SELECT wr_order_number + FROM web_returns, + ws_wh + WHERE wr_order_number = ws_wh.ws_order_number) +ORDER BY count(DISTINCT ws_order_number) +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ws_order_number = ws_order_number)", + "(ws_warehouse_sk != ws_warehouse_sk)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "ws_order_number", + "wh1", + "wh2" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_sold_date_sk", + "ws_sold_time_sk", + "ws_ship_date_sk", + "ws_item_sk", + "ws_bill_customer_sk", + "ws_bill_cdemo_sk", + "ws_bill_hdemo_sk", + "ws_bill_addr_sk", + "ws_ship_customer_sk", + "ws_ship_cdemo_sk", + "ws_ship_hdemo_sk", + "ws_ship_addr_sk", + "ws_web_page_sk", + "ws_web_site_sk", + "ws_ship_mode_sk", + "ws_warehouse_sk", + "ws_promo_sk", + "ws_order_number", + "ws_quantity", + "ws_wholesale_cost", + "ws_list_price", + "ws_sales_price", + "ws_ext_discount_amt", + "ws_ext_sales_price", + "ws_ext_wholesale_cost", + "ws_ext_list_price", + "ws_ext_tax", + "ws_coupon_amt", + "ws_ext_ship_cost", + "ws_net_paid", + "ws_net_paid_inc_tax", + "ws_net_paid_inc_ship", + "ws_net_paid_inc_ship_tax", + "ws_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ca_address_sk", + "ca_address_id", + "ca_street_number", + "ca_street_name", + "ca_street_type", + "ca_suite_number", + "ca_city", + "ca_county", + "ca_state", + "ca_zip", + "ca_country", + "ca_gmt_offset", + "ca_location_type" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "web_site_sk", + "web_site_id", + "web_rec_start_date", + "web_rec_end_date", + "web_name", + "web_open_date_sk", + "web_close_date_sk", + "web_class", + "web_manager", + "web_mkt_id", + "web_mkt_class", + "web_mkt_desc", + "web_market_manager", + "web_company_id", + "web_company_name", + "web_street_number", + "web_street_name", + "web_street_type", + "web_suite_number", + "web_city", + "web_county", + "web_state", + "web_zip", + "web_country", + "web_gmt_offset", + "web_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(ws_order_number = #[56.0])" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "wr_returned_date_sk", + "wr_returned_time_sk", + "wr_item_sk", + "wr_refunded_customer_sk", + "wr_refunded_cdemo_sk", + "wr_refunded_hdemo_sk", + "wr_refunded_addr_sk", + "wr_returning_customer_sk", + "wr_returning_cdemo_sk", + "wr_returning_hdemo_sk", + "wr_returning_addr_sk", + "wr_web_page_sk", + "wr_reason_sk", + "wr_order_number", + "wr_return_quantity", + "wr_return_amt", + "wr_return_tax", + "wr_return_amt_inc_tax", + "wr_fee", + "wr_return_ship_cost", + "wr_refunded_cash", + "wr_reversed_charge", + "wr_account_credit", + "wr_net_loss" + ] + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": "(wr_order_number = ws_order_number)" + } + } + ], + "extra_info": { + "Expressions": "wr_order_number" + } + } + ], + "extra_info": { + "Join Type": "MARK", + "Conditions": "(ws_order_number = #[70.0])" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_date >= CAST('1999-02-01' AS DATE))", + "(ws_ship_date_sk = d_date_sk)", + "(ws_ship_addr_sk = ca_address_sk)", + "(ca_state = CAST('IL' AS VARCHAR))", + "(ws_web_site_sk = web_site_sk)", + "(web_company_name = CAST('pri' AS VARCHAR))", + "SUBQUERY", + "SUBQUERY", + "(d_date <= CAST('1999-04-02' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT ws_order_number)", + "sum(ws_ext_ship_cost)", + "sum(ws_net_profit)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ] + } + } + ], + "extra_info": { + "Order By": "count(DISTINCT ws1.ws_order_number)" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "ws_wh", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999-02-01 <= $.d_date <= 1999-04-02)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ws_order_number = ws_order_number)", + "(ws_warehouse_sk != ws_warehouse_sk)" + ], + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number", + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "#0", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Expressions": "wr_order_number", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_order_number = wr_order_number)", + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "wr_order_number", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "(ws_order_number = ws_order_number)", + "(ws_warehouse_sk != ws_warehouse_sk)" + ], + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number", + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "#0", + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Expressions": "ws_order_number", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Expressions": [ + "ws_ship_date_sk", + "ws_ship_addr_sk", + "ws_web_site_sk", + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.ca_state = \"IL\")", + "($.ca_address_sk <= 4998i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Expressions": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_ship_addr_sk = ca_address_sk)", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "(#0 = ws_order_number)", + "Estimated Cardinality": "2865" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "(#0 = ws_order_number)", + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(d_date_sk = ws_ship_date_sk)", + "Estimated Cardinality": "573" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ws_web_site_sk = web_site_sk)", + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "count(DISTINCT ws_order_number)", + "sum(ws_ext_ship_cost)", + "sum(ws_net_profit)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "order count", + "total shipping cost", + "total net profit" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999-02-01 <= $.d_date <= 1999-04-02)", + "(2450820i64 <= $.d_date_sk <= 2452762i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ws_order_number = ws_order_number", + "ws_warehouse_sk != ws_warehouse_sk" + ], + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Projections": "ws_order_number", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": "wr_order_number", + "Estimated Cardinality": "7037" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_order_number = wr_order_number", + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Projections": "wr_order_number", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_warehouse_sk", + "ws_order_number" + ], + "Estimated Cardinality": "71632" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": [ + "ws_order_number = ws_order_number", + "ws_warehouse_sk != ws_warehouse_sk" + ], + "Estimated Cardinality": "2974925" + } + } + ], + "extra_info": { + "Projections": "ws_order_number", + "Estimated Cardinality": "2974925" + } + }, + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ws_ship_date_sk", + "ws_ship_addr_sk", + "ws_web_site_sk", + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "71632" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "ca_state='IL'", + "Projections": "ca_address_sk", + "Estimated Cardinality": "200" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_ship_addr_sk = ca_address_sk", + "Estimated Cardinality": "14326" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "#0 = ws_order_number", + "Estimated Cardinality": "2865" + } + } + ], + "extra_info": { + "Join Type": "RIGHT_SEMI", + "Conditions": "#0 = ws_order_number", + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "d_date_sk = ws_ship_date_sk", + "Estimated Cardinality": "573" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ws_web_site_sk = web_site_sk", + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Projections": [ + "ws_order_number", + "ws_ext_ship_cost", + "ws_net_profit" + ], + "Estimated Cardinality": "573" + } + } + ], + "extra_info": { + "Aggregates": [ + "count(DISTINCT #0)", + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "count(DISTINCT ws1.ws_order_number) ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q96.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q96.slt.no new file mode 100644 index 00000000000..44b3d805043 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q96.slt.no @@ -0,0 +1,446 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT count(*) +FROM store_sales , + household_demographics, + time_dim, + store +WHERE ss_sold_time_sk = time_dim.t_time_sk + AND ss_hdemo_sk = household_demographics.hd_demo_sk + AND ss_store_sk = s_store_sk + AND time_dim.t_hour = 20 + AND time_dim.t_minute >= 30 + AND household_demographics.hd_dep_count = 7 + AND store.s_store_name = 'ese' +ORDER BY count(*) +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "hd_demo_sk", + "hd_income_band_sk", + "hd_buy_potential", + "hd_dep_count", + "hd_vehicle_count" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "t_time_sk", + "t_time_id", + "t_time", + "t_hour", + "t_minute", + "t_second", + "t_am_pm", + "t_shift", + "t_sub_shift", + "t_meal_time" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "s_store_sk", + "s_store_id", + "s_rec_start_date", + "s_rec_end_date", + "s_closed_date_sk", + "s_store_name", + "s_number_employees", + "s_floor_space", + "s_hours", + "s_manager", + "s_market_id", + "s_geography_class", + "s_market_desc", + "s_market_manager", + "s_division_id", + "s_division_name", + "s_company_id", + "s_company_name", + "s_street_number", + "s_street_name", + "s_street_type", + "s_suite_number", + "s_city", + "s_county", + "s_state", + "s_zip", + "s_country", + "s_gmt_offset", + "s_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_time_sk = t_time_sk)", + "(ss_hdemo_sk = hd_demo_sk)", + "(ss_store_sk = s_store_sk)", + "(t_hour = CAST(20 AS BIGINT))", + "(t_minute >= CAST(30 AS BIGINT))", + "(hd_dep_count = CAST(7 AS BIGINT))", + "(s_store_name = CAST('ese' AS VARCHAR))" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "count_star()" + } + } + ], + "extra_info": { + "Order By": "count_star()" + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "($.hd_dep_count = 7i64)", + "Function": "Vortex Scan", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Expressions": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_hdemo_sk = hd_demo_sk)", + "Estimated Cardinality": "57692" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "($.t_hour = 20i64)", + "($.t_minute >= 30i64)", + "(28803i64 <= $.t_time_sk <= 75598i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Expressions": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_time_sk = t_time_sk)", + "Estimated Cardinality": "11538" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_store_sk = s_store_sk)", + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "count_star()", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "1" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_time_sk", + "ss_hdemo_sk", + "ss_store_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "hd_dep_count=7", + "Projections": "hd_demo_sk", + "Estimated Cardinality": "288" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_hdemo_sk = hd_demo_sk", + "Estimated Cardinality": "57692" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "t_hour=20", + "Projections": "t_time_sk", + "Estimated Cardinality": "3456" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_time_sk = t_time_sk", + "Estimated Cardinality": "11538" + } + }, + { + "name": "EMPTY_RESULT", + "children": [], + "extra_info": {} + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_store_sk = s_store_sk", + "Estimated Cardinality": "11538" + } + } + ], + "extra_info": { + "Aggregates": "count_star()" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": "count_star() ASC" + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q97.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q97.slt.no new file mode 100644 index 00000000000..71783637044 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q97.slt.no @@ -0,0 +1,910 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +WITH ssci AS + (SELECT ss_customer_sk customer_sk , + ss_item_sk item_sk + FROM store_sales, + date_dim + WHERE ss_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 + GROUP BY ss_customer_sk , + ss_item_sk), + csci as + ( SELECT cs_bill_customer_sk customer_sk ,cs_item_sk item_sk + FROM catalog_sales,date_dim + WHERE cs_sold_date_sk = d_date_sk + AND d_month_seq BETWEEN 1200 AND 1200 + 11 + GROUP BY cs_bill_customer_sk ,cs_item_sk) +SELECT sum(CASE + WHEN ssci.customer_sk IS NOT NULL + AND csci.customer_sk IS NULL THEN 1 + ELSE 0 + END) store_only , + sum(CASE + WHEN ssci.customer_sk IS NULL + AND csci.customer_sk IS NOT NULL THEN 1 + ELSE 0 + END) catalog_only , + sum(CASE + WHEN ssci.customer_sk IS NOT NULL + AND csci.customer_sk IS NOT NULL THEN 1 + ELSE 0 + END) store_and_catalog +FROM ssci +FULL OUTER JOIN csci ON (ssci.customer_sk=csci.customer_sk + AND ssci.item_sk = csci.item_sk) +LIMIT 100; +---- +logical_plan [ + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "ss_customer_sk", + "ss_item_sk" + ], + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_sk", + "item_sk" + ] + } + }, + { + "name": "CTE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(cs_sold_date_sk = d_date_sk)", + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_sk", + "item_sk" + ] + } + }, + { + "name": "LIMIT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "0" + } + }, + { + "name": "CTE_SCAN", + "children": [], + "extra_info": { + "CTE Index": "1" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "(customer_sk = customer_sk)", + "(item_sk = item_sk)" + ] + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "sum(CASE WHEN (((customer_sk IS NOT NULL) AND (customer_sk IS NULL))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN (((customer_sk IS NULL) AND (customer_sk IS NOT NULL))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN (((customer_sk IS NOT NULL) AND (customer_sk IS NOT NULL))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "store_only", + "catalog_only", + "store_and_catalog" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "CTE Name": "csci", + "Table Index": "1" + } + } + ], + "extra_info": { + "CTE Name": "ssci", + "Table Index": "0" + } + } +] +logical_opt [ + { + "name": "PROJECTION", + "children": [ + { + "name": "LIMIT", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "ss_customer_sk", + "ss_item_sk" + ], + "Expressions": "", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_sk", + "item_sk" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Expressions": "", + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Expressions": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Expressions": [ + "customer_sk", + "item_sk" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "(customer_sk = customer_sk)", + "(item_sk = item_sk)" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Expressions": [ + "(customer_sk IS NOT NULL)", + "customer_sk", + "customer_sk" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Groups": "", + "Expressions": [ + "sum(CASE WHEN ((#0 AND (customer_sk IS NULL))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((customer_sk IS NULL) AND (customer_sk IS NOT NULL))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN ((#0 AND (customer_sk IS NOT NULL))) THEN (1) ELSE 0 END)" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "store_only", + "catalog_only", + "store_and_catalog" + ], + "Estimated Cardinality": "0" + } + } +] +physical_plan [ + { + "name": "STREAMING_LIMIT", + "children": [ + { + "name": "UNGROUPED_AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_customer_sk" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "ss_customer_sk", + "ss_item_sk" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "", + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "288463" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450815i64 <= $.d_date_sk <= 2452652i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_sold_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_compress_integral_usmallint(#0, 1)", + "__internal_compress_integral_usmallint(#1, 1)", + "__internal_compress_integral_usmallint(#2, 2450815)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "cs_bill_customer_sk", + "cs_item_sk" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1" + ], + "Aggregates": "", + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Projections": [ + "__internal_decompress_integral_bigint(#0, 1)", + "__internal_decompress_integral_bigint(#1, 1)" + ], + "Estimated Cardinality": "143656" + } + } + ], + "extra_info": { + "Join Type": "FULL", + "Conditions": [ + "customer_sk = customer_sk", + "item_sk = item_sk" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "(customer_sk IS NOT NULL)", + "customer_sk", + "customer_sk" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Projections": [ + "CASE WHEN ((#0 AND (customer_sk IS NULL))) THEN (1) ELSE 0 END", + "CASE WHEN (((customer_sk IS NULL) AND (customer_sk IS NOT NULL))) THEN (1) ELSE 0 END", + "CASE WHEN ((#0 AND (customer_sk IS NOT NULL))) THEN (1) ELSE 0 END" + ], + "Estimated Cardinality": "288463" + } + } + ], + "extra_info": { + "Aggregates": [ + "sum(#0)", + "sum(#1)", + "sum(#2)" + ] + } + } + ], + "extra_info": {} + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q98.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q98.slt.no new file mode 100644 index 00000000000..64074162d9d --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q98.slt.no @@ -0,0 +1,590 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT i_item_id , + i_item_desc, + i_category, + i_class, + i_current_price , + sum(ss_ext_sales_price) AS itemrevenue, + sum(ss_ext_sales_price)*100.0000/sum(sum(ss_ext_sales_price)) OVER (PARTITION BY i_class) AS revenueratio +FROM store_sales , + item, + date_dim +WHERE ss_item_sk = i_item_sk + AND i_category IN ('Sports', + 'Books', + 'Home') + AND ss_sold_date_sk = d_date_sk + AND d_date BETWEEN cast('1999-02-22' AS date) AND cast('1999-03-24' AS date) +GROUP BY i_item_id , + i_item_desc, + i_category , + i_class , + i_current_price +ORDER BY i_category NULLS FIRST, + i_class NULLS FIRST, + i_item_id NULLS FIRST, + i_item_desc NULLS FIRST, + revenueratio NULLS FIRST; +---- +logical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_sold_time_sk", + "ss_item_sk", + "ss_customer_sk", + "ss_cdemo_sk", + "ss_hdemo_sk", + "ss_addr_sk", + "ss_store_sk", + "ss_promo_sk", + "ss_ticket_number", + "ss_quantity", + "ss_wholesale_cost", + "ss_list_price", + "ss_sales_price", + "ss_ext_discount_amt", + "ss_ext_sales_price", + "ss_ext_wholesale_cost", + "ss_ext_list_price", + "ss_ext_tax", + "ss_coupon_amt", + "ss_net_paid", + "ss_net_paid_inc_tax", + "ss_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_rec_start_date", + "i_rec_end_date", + "i_item_desc", + "i_current_price", + "i_wholesale_cost", + "i_brand_id", + "i_brand", + "i_class_id", + "i_class", + "i_category_id", + "i_category", + "i_manufact_id", + "i_manufact", + "i_size", + "i_formulation", + "i_color", + "i_units", + "i_container", + "i_manager_id", + "i_product_name" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(ss_item_sk = i_item_sk)", + "(i_category IN (CAST('Sports' AS VARCHAR), CAST('Books' AS VARCHAR), CAST('Home' AS VARCHAR)))", + "(ss_sold_date_sk = d_date_sk)", + "(d_date >= CAST('1999-02-22' AS DATE))", + "(d_date <= CAST('1999-03-24' AS DATE))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(ss_ext_sales_price)" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ss_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ] + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_category", + "memory.main.item.i_class", + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "((sum(memory.main.store_sales.ss_ext_sales_price) * 100.0000) / sum(sum(memory.main.store_sales.ss_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class))" + ] + } + } +] +logical_opt [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Function": "Vortex Scan", + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_item_sk = i_item_sk)", + "Estimated Cardinality": "288464" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(ss_sold_date_sk = d_date_sk)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price" + ], + "Expressions": "sum(ss_ext_sales_price)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": "sum(sum(ss_ext_sales_price)) OVER (PARTITION BY i_class)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Expressions": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_category", + "memory.main.item.i_class", + "memory.main.item.i_item_id", + "memory.main.item.i_item_desc", + "((sum(memory.main.store_sales.ss_ext_sales_price) * 100.0000) / sum(sum(memory.main.store_sales.ss_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class))" + ] + } + } +] +physical_plan [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "WINDOW", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "ss_sold_date_sk", + "ss_item_sk", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": "vortex.list.contains([\"Sports\", \"Books\", \"Home\"], $.i_category)", + "Projections": [ + "i_item_sk", + "i_item_id", + "i_item_desc", + "i_current_price", + "i_class", + "i_category" + ], + "Estimated Cardinality": "360" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_item_sk = i_item_sk", + "Estimated Cardinality": "288464" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1999-02-22 <= $.d_date <= 1999-03-24)", + "(2450816i64 <= $.d_date_sk <= 2452642i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "ss_sold_date_sk = d_date_sk", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "__internal_compress_integral_usmallint(#6, 2450816)" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "ss_ext_sales_price" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2", + "#3", + "#4" + ], + "Aggregates": "sum(#5)", + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": "sum(sum(ss_ext_sales_price)) OVER (PARTITION BY i_class)" + } + } + ], + "extra_info": { + "Projections": [ + "#0", + "#1", + "#2", + "#3", + "#4", + "#5", + "#6" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Projections": [ + "i_item_id", + "i_item_desc", + "i_category", + "i_class", + "i_current_price", + "itemrevenue", + "revenueratio" + ], + "Estimated Cardinality": "288464" + } + } + ], + "extra_info": { + "Order By": [ + "memory.main.item.i_category ASC", + "memory.main.item.i_class ASC", + "memory.main.item.i_item_id ASC", + "memory.main.item.i_item_desc ASC", + "((sum(memory.main.store_sales.ss_ext_sales_price) * 100.0000) / sum(sum(memory.main.store_sales.ss_ext_sales_price)) OVER (PARTITION BY memory.main.item.i_class)) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/plans/q99.slt.no b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q99.slt.no new file mode 100644 index 00000000000..b5d42495899 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/plans/q99.slt.no @@ -0,0 +1,801 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +query TT +EXPLAIN (FORMAT json) +SELECT w_substr , + sm_type , + LOWER(cc_name) cc_name_lower , + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk <= 30) THEN 1 + ELSE 0 + END) AS "30 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 30) + AND (cs_ship_date_sk - cs_sold_date_sk <= 60) THEN 1 + ELSE 0 + END) AS "31-60 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 60) + AND (cs_ship_date_sk - cs_sold_date_sk <= 90) THEN 1 + ELSE 0 + END) AS "61-90 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 90) + AND (cs_ship_date_sk - cs_sold_date_sk <= 120) THEN 1 + ELSE 0 + END) AS "91-120 days", + sum(CASE + WHEN (cs_ship_date_sk - cs_sold_date_sk > 120) THEN 1 + ELSE 0 + END) AS ">120 days" +FROM catalog_sales , + (SELECT SUBSTRING(w_warehouse_name,1,20) w_substr, * + FROM warehouse) AS sq1 , + ship_mode , + call_center , + date_dim +WHERE d_month_seq BETWEEN 1200 AND 1200 + 11 + AND cs_ship_date_sk = d_date_sk + AND cs_warehouse_sk = w_warehouse_sk + AND cs_ship_mode_sk = sm_ship_mode_sk + AND cs_call_center_sk = cc_call_center_sk +GROUP BY w_substr , + sm_type , + cc_name +ORDER BY w_substr NULLS FIRST, + sm_type NULLS FIRST, + cc_name_lower NULLS FIRST +LIMIT 100; +---- +logical_plan [ + { + "name": "LIMIT", + "children": [ + { + "name": "ORDER_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "FILTER", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "CROSS_PRODUCT", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_sold_time_sk", + "cs_ship_date_sk", + "cs_bill_customer_sk", + "cs_bill_cdemo_sk", + "cs_bill_hdemo_sk", + "cs_bill_addr_sk", + "cs_ship_customer_sk", + "cs_ship_cdemo_sk", + "cs_ship_hdemo_sk", + "cs_ship_addr_sk", + "cs_call_center_sk", + "cs_catalog_page_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk", + "cs_item_sk", + "cs_promo_sk", + "cs_order_number", + "cs_quantity", + "cs_wholesale_cost", + "cs_list_price", + "cs_sales_price", + "cs_ext_discount_amt", + "cs_ext_sales_price", + "cs_ext_wholesale_cost", + "cs_ext_list_price", + "cs_ext_tax", + "cs_coupon_amt", + "cs_ext_ship_cost", + "cs_net_paid", + "cs_net_paid_inc_tax", + "cs_net_paid_inc_ship", + "cs_net_paid_inc_ship_tax", + "cs_net_profit" + ] + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "w_warehouse_sk", + "w_warehouse_id", + "w_warehouse_name", + "w_warehouse_sq_ft", + "w_street_number", + "w_street_name", + "w_street_type", + "w_suite_number", + "w_city", + "w_county", + "w_state", + "w_zip", + "w_country", + "w_gmt_offset" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_ship_mode_id", + "sm_type", + "sm_code", + "sm_carrier", + "sm_contract" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_call_center_id", + "cc_rec_start_date", + "cc_rec_end_date", + "cc_closed_date_sk", + "cc_open_date_sk", + "cc_name", + "cc_class", + "cc_employees", + "cc_sq_ft", + "cc_hours", + "cc_manager", + "cc_mkt_id", + "cc_mkt_class", + "cc_mkt_desc", + "cc_market_manager", + "cc_division", + "cc_division_name", + "cc_company", + "cc_company_name", + "cc_street_number", + "cc_street_name", + "cc_street_type", + "cc_suite_number", + "cc_city", + "cc_county", + "cc_state", + "cc_zip", + "cc_country", + "cc_gmt_offset", + "cc_tax_percentage" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan" + } + } + ], + "extra_info": { + "Expressions": [ + "d_date_sk", + "d_date_id", + "d_date", + "d_month_seq", + "d_week_seq", + "d_quarter_seq", + "d_year", + "d_dow", + "d_moy", + "d_dom", + "d_qoy", + "d_fy_year", + "d_fy_quarter_seq", + "d_fy_week_seq", + "d_day_name", + "d_quarter_name", + "d_holiday", + "d_weekend", + "d_following_holiday", + "d_first_dom", + "d_last_dom", + "d_same_day_ly", + "d_same_day_lq", + "d_current_day", + "d_current_week", + "d_current_month", + "d_current_quarter", + "d_current_year" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } + ], + "extra_info": { + "Expressions": [ + "(d_month_seq >= CAST(1200 AS BIGINT))", + "(cs_ship_date_sk = d_date_sk)", + "(cs_warehouse_sk = w_warehouse_sk)", + "(cs_ship_mode_sk = sm_ship_mode_sk)", + "(cs_call_center_sk = cc_call_center_sk)", + "(d_month_seq <= CAST((1200 + 11) AS BIGINT))" + ] + } + } + ], + "extra_info": { + "Groups": [ + "w_substr", + "sm_type", + "cc_name" + ], + "Expressions": [ + "sum(CASE WHEN (((cs_ship_date_sk - cs_sold_date_sk) <= CAST(30 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((cs_ship_date_sk - cs_sold_date_sk) > CAST(30 AS BIGINT)) AND ((cs_ship_date_sk - cs_sold_date_sk) <= CAST(60 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((cs_ship_date_sk - cs_sold_date_sk) > CAST(60 AS BIGINT)) AND ((cs_ship_date_sk - cs_sold_date_sk) <= CAST(90 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN ((((cs_ship_date_sk - cs_sold_date_sk) > CAST(90 AS BIGINT)) AND ((cs_ship_date_sk - cs_sold_date_sk) <= CAST(120 AS BIGINT)))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)", + "sum(CASE WHEN (((cs_ship_date_sk - cs_sold_date_sk) > CAST(120 AS BIGINT))) THEN (CAST(1 AS INTEGER)) ELSE CAST(0 AS INTEGER) END)" + ] + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "cc_name_lower", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ] + } + } + ], + "extra_info": { + "Order By": [ + "sq1.w_substr", + "memory.main.ship_mode.sm_type", + "lower(memory.main.call_center.cc_name)" + ] + } + } + ], + "extra_info": { + "Expressions": "" + } + } +] +logical_opt [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "AGGREGATE", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "COMPARISON_JOIN", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "cs_sold_date_sk", + "cs_ship_date_sk", + "cs_call_center_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "w_warehouse_sk" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_warehouse_sk = w_warehouse_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Expressions": [ + "sm_ship_mode_sk", + "sm_type" + ], + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_mode_sk = sm_ship_mode_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": "", + "Function": "Vortex Scan", + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Expressions": [ + "cc_call_center_sk", + "cc_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_call_center_sk = cc_call_center_sk)", + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450817i64 <= $.d_date_sk <= 2452740i64)" + ], + "Function": "Vortex Scan", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Expressions": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "(cs_ship_date_sk = d_date_sk)", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "cc_name", + "(cs_ship_date_sk - cs_sold_date_sk)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "w_substr", + "sm_type", + "cc_name" + ], + "Expressions": [ + "sum(CASE WHEN ((#3 <= 30)) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 30) AND (#3 <= 60))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 60) AND (#3 <= 90))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN (((#3 > 90) AND (#3 <= 120))) THEN (1) ELSE 0 END)", + "sum(CASE WHEN ((#3 > 120)) THEN (1) ELSE 0 END)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": [ + "w_substr", + "sm_type", + "cc_name_lower", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Expressions": "", + "Estimated Cardinality": "100" + } + } +] +physical_plan [ + { + "name": "TOP_N", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_GROUP_BY", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "PROJECTION", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "HASH_JOIN", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cs_sold_date_sk", + "cs_ship_date_sk", + "cs_call_center_sk", + "cs_ship_mode_sk", + "cs_warehouse_sk" + ], + "Estimated Cardinality": "143657" + } + }, + { + "name": "PROJECTION", + "children": [ + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "w_warehouse_sk", + "w_warehouse_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "w_warehouse_sk" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_warehouse_sk = w_warehouse_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "sm_ship_mode_sk", + "sm_type" + ], + "Estimated Cardinality": "20" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_mode_sk = sm_ship_mode_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Projections": [ + "cc_call_center_sk", + "cc_name" + ], + "Estimated Cardinality": "1" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_call_center_sk = cc_call_center_sk", + "Estimated Cardinality": "143657" + } + }, + { + "name": "READ_VORTEX", + "children": [], + "extra_info": { + "Function": "Vortex Scan", + "Filters": [ + "(1200i64 <= $.d_month_seq <= 1211i64)", + "(2450817i64 <= $.d_date_sk <= 2452740i64)" + ], + "Projections": "d_date_sk", + "Estimated Cardinality": "14609" + } + } + ], + "extra_info": { + "Join Type": "INNER", + "Conditions": "cs_ship_date_sk = d_date_sk", + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "sm_type", + "cc_name", + "(cs_ship_date_sk - cs_sold_date_sk)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "sm_type", + "cc_name", + "CASE WHEN ((#3 <= 30)) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 30) AND (#3 <= 60))) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 60) AND (#3 <= 90))) THEN (1) ELSE 0 END", + "CASE WHEN (((#3 > 90) AND (#3 <= 120))) THEN (1) ELSE 0 END", + "CASE WHEN ((#3 > 120)) THEN (1) ELSE 0 END" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Groups": [ + "#0", + "#1", + "#2" + ], + "Aggregates": [ + "sum(#3)", + "sum(#4)", + "sum(#5)", + "sum(#6)", + "sum(#7)" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Projections": [ + "w_substr", + "sm_type", + "cc_name_lower", + "30 days", + "31-60 days", + "61-90 days", + "91-120 days", + ">120 days" + ], + "Estimated Cardinality": "143657" + } + } + ], + "extra_info": { + "Top": "100", + "Order By": [ + "sq1.w_substr ASC", + "memory.main.ship_mode.sm_type ASC", + "lower(memory.main.call_center.cc_name) ASC" + ] + } + } +] diff --git a/vortex-sqllogictest/slt/tpcds/duckdb/tpcds.slt b/vortex-sqllogictest/slt/tpcds/duckdb/tpcds.slt new file mode 100644 index 00000000000..ada55bdecff --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/duckdb/tpcds.slt @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +include ../../setup.slt.no + +let FILE_FORMAT +SELECT 'vortex'; + +statement ok +SET explain_output = 'all'; + +include ./create.slt.no +include ./plans/*.slt.no +include ./drop.slt.no diff --git a/vortex-sqllogictest/slt/tpcds/generate_data.sh b/vortex-sqllogictest/slt/tpcds/generate_data.sh new file mode 100755 index 00000000000..11a379eb930 --- /dev/null +++ b/vortex-sqllogictest/slt/tpcds/generate_data.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright the Vortex contributors + +# Generates TPC-DS at scale factor 0.1 with DuckDB's tpcds extension into +# slt/tpcds/data/, one Parquet file per table, converts every table to Vortex, +# and checks that the Parquet and Vortex tables hold identical data before the +# Vortex files are used by the SLT suite. Set VORTEX_SLT_PROFILE to reuse an +# existing cargo profile for the parity test (CI uses `ci`). + +set -e -o pipefail + +if ! command -v uvx &> /dev/null; then + echo "Error: uvx not found. Install uv first: https://docs.astral.sh/uv/" >&2 + exit 1 +fi + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CRATE_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)" +DATA_DIR="${SCRIPT_DIR}/data" +SCALE_FACTOR="0.1" + +rm -rf "${DATA_DIR}" +mkdir -p "${DATA_DIR}" + +echo "Generating TPC-DS data (SF=${SCALE_FACTOR})..." +uvx --with duckdb python - "${DATA_DIR}" "${SCALE_FACTOR}" <<'PY' +import sys +import duckdb + +data_dir, scale_factor = sys.argv[1], sys.argv[2] +con = duckdb.connect() +con.execute(f"CALL dsdgen(sf={scale_factor})") +con.execute(f"EXPORT DATABASE '{data_dir}' (FORMAT parquet)") +PY +# EXPORT DATABASE also writes load/schema scripts that the tests do not use. +rm -f "${DATA_DIR}"/load.sql "${DATA_DIR}"/schema.sql + +# The Parquet files are kept so the parity test can read them, and because the +# suite only runs when both formats are present. +for f in "${DATA_DIR}"/*.parquet; do + echo "Converting $(basename "$f") to Vortex..." + (cd "${CRATE_DIR}" && cargo run --release --package vortex-tui --bin vx -- convert "$f") +done + +# The parity test reads every table in both formats through DuckDB and fails if +# any row differs, so a bad conversion is caught before the recorded plans are +# trusted. +echo "Checking that the TPC-DS Parquet and Vortex tables match..." +( + cd "${CRATE_DIR}" + cargo test --profile "${VORTEX_SLT_PROFILE:-release}" -p vortex-sqllogictest --test sqllogictests \ + -- --exact 'slt::duckdb::tpcds/duckdb/parity.slt' +)