diff --git a/Cargo.lock b/Cargo.lock index c100c24613b..127c88c364f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11757,6 +11757,7 @@ dependencies = [ "insta", "itertools 0.14.0", "object_store 0.13.2", + "parking_lot", "rstest", "tempfile", "tokio", diff --git a/encodings/pco/src/probe/tests.rs b/encodings/pco/src/probe/tests.rs index f4c9740cf2c..bcfe78ec281 100644 --- a/encodings/pco/src/probe/tests.rs +++ b/encodings/pco/src/probe/tests.rs @@ -10,11 +10,51 @@ use vortex_array::VortexSessionExecute; use vortex_array::arrays::PrimitiveArray; use vortex_array::assert_arrays_eq; use vortex_array::builders::builder_with_capacity_in; +use vortex_array::search_sorted::SearchResult; +use vortex_array::search_sorted::SearchSorted; +use vortex_array::search_sorted::SearchSortedPrimitiveArray; +use vortex_array::search_sorted::SearchSortedSide; use vortex_array::validity::Validity; use vortex_error::VortexResult; use crate::Pco; +#[rstest] +fn search_sorted_across_pages( + #[values(false, true)] nullable: bool, + #[values(false, true)] sliced: bool, +) -> VortexResult<()> { + let mut ctx = vortex_array::array_session().create_execution_ctx(); + let expected: Vec> = (0..4096u32) + .map(|i| (!nullable || i >= 32).then_some(i / 3)) + .collect(); + let input = if nullable { + PrimitiveArray::from_option_iter(expected.iter().copied()) + } else { + PrimitiveArray::from_iter((0..4096u32).map(|i| i / 3)) + }; + let encoded = Pco::from_primitive(input.as_view(), 3, 128, &mut ctx)?.into_array(); + let range = if sliced { 17..3333 } else { 0..4096 }; + let source = encoded.slice(range.clone())?; + let expected = &expected[range]; + let searcher = SearchSortedPrimitiveArray::::new_repeated(&source, &mut ctx); + for needle in [None, Some(0), Some(511), Some(1365), Some(100), Some(2048)] { + for side in [SearchSortedSide::Left, SearchSortedSide::Right] { + let index = expected.partition_point(|value| match side { + SearchSortedSide::Left => value < &needle, + SearchSortedSide::Right => value <= &needle, + }); + let result = if expected.contains(&needle) { + SearchResult::Found(index) + } else { + SearchResult::NotFound(index) + }; + assert_eq!(searcher.search_sorted(&needle, side)?, result); + } + } + Ok(()) +} + /// A one-off or retained probe over `array`, the retained one living in `retained`. fn probe_for<'a>( array: &'a ArrayRef, diff --git a/encodings/runend/benches/run_end_decode.rs b/encodings/runend/benches/run_end_decode.rs index 3ca4544312d..16b8ba2c630 100644 --- a/encodings/runend/benches/run_end_decode.rs +++ b/encodings/runend/benches/run_end_decode.rs @@ -11,9 +11,16 @@ use mimalloc::MiMalloc; use vortex_array::VortexSessionExecute; use vortex_array::arrays::BoolArray; use vortex_array::arrays::PrimitiveArray; +use vortex_array::dtype::NativePType; +use vortex_array::dtype::Nullability; use vortex_array::validity::Validity; use vortex_buffer::BitBuffer; +use vortex_buffer::Buffer; use vortex_buffer::BufferMut; +use vortex_error::VortexExpect; +use vortex_mask::Mask; +use vortex_runend::compress::runend_decode_primitive; +use vortex_runend::compress::runend_decode_typed_primitive; use vortex_runend::decompress_bool::runend_decode_bools; use vortex_session::VortexSession; @@ -389,3 +396,101 @@ fn decode_bool_nullable(bencher: Bencher, args: NullableBoolBenchArgs) { runend_decode_bools(ends.clone(), values.clone(), 0, total_length, ctx) }); } + +#[derive(Clone, Copy)] +struct PrimitiveBenchArgs { + run_length: usize, + valid_percent: usize, + validity_offset: usize, +} + +impl fmt::Display for PrimitiveBenchArgs { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "run_{}_valid_{}_offset_{}", + self.run_length, self.valid_percent, self.validity_offset + ) + } +} + +const PRIMITIVE_ARGS: [PrimitiveBenchArgs; 30] = { + let mut args = [PrimitiveBenchArgs { + run_length: 1, + valid_percent: 99, + validity_offset: 0, + }; 30]; + let lengths = [1, 2, 16, 128, 4096]; + let validities = [10, 50, 99]; + let mut i = 0; + while i < args.len() { + args[i] = PrimitiveBenchArgs { + run_length: lengths[i / 6], + valid_percent: validities[(i / 2) % 3], + validity_offset: (i % 2) * 3, + }; + i += 1; + } + args +}; + +#[divan::bench(types = [u16, i64], args = PRIMITIVE_ARGS)] +fn decode_primitive_nullable(bencher: Bencher, args: PrimitiveBenchArgs) { + let length = 65_536usize; + let run_count = length.div_ceil(args.run_length); + let values: Vec = (0..run_count) + .map(|i| T::from_usize(i % 1024).vortex_expect("benchmark value fits")) + .collect(); + let validity = BitBuffer::from_iter( + (0..run_count + args.validity_offset).map(|i| (i * 37) % 100 < args.valid_percent), + ) + .slice(args.validity_offset..run_count + args.validity_offset); + let validity = Mask::from(validity); + bencher.bench(|| { + runend_decode_typed_primitive( + (1..=run_count).map(|i| (i * args.run_length).min(length)), + &values, + validity.clone(), + Nullability::Nullable, + length, + ) + }); +} + +#[divan::bench(types = [u16, i64], args = [1usize, 2, 16, 128, 4096])] +fn decode_primitive_non_nullable(bencher: Bencher, run_length: usize) { + let length = 65_536usize; + let run_count = length.div_ceil(run_length); + let values: Vec = (0..run_count) + .map(|i| T::from_usize(i % 1024).vortex_expect("benchmark value fits")) + .collect(); + bencher.bench(|| { + runend_decode_typed_primitive( + (1..=run_count).map(|i| (i * run_length).min(length)), + &values, + Mask::AllTrue(run_count), + Nullability::NonNullable, + length, + ) + }); +} + +#[divan::bench(types = [u16, i64], args = [1usize, 2, 16, 128, 4096])] +fn decode_primitive_array(bencher: Bencher, run_length: usize) { + let length = 65_536usize; + let run_count = length.div_ceil(run_length); + let ends = + PrimitiveArray::from_iter((1..=run_count).map(|i| (i * run_length).min(length) as u32)); + let values = PrimitiveArray::new( + Buffer::from_iter( + (0..run_count).map(|i| T::from_usize(i % 1024).vortex_expect("benchmark value fits")), + ), + Validity::NonNullable, + ); + bencher + .with_inputs(|| SESSION.create_execution_ctx()) + .bench_refs(|ctx| { + runend_decode_primitive(ends.clone(), values.clone(), 0, length, ctx) + .vortex_expect("benchmark decode succeeds") + }); +} diff --git a/encodings/runend/benches/run_end_filter.rs b/encodings/runend/benches/run_end_filter.rs index b012d43ca7d..839fc71f99a 100644 --- a/encodings/runend/benches/run_end_filter.rs +++ b/encodings/runend/benches/run_end_filter.rs @@ -14,14 +14,21 @@ #![expect(clippy::expect_used)] use std::fmt; +use std::sync::LazyLock; use divan::Bencher; use mimalloc::MiMalloc; use rand::SeedableRng; use rand::rngs::StdRng; use rand::seq::SliceRandom; +use vortex_array::IntoArray; +use vortex_array::VortexSessionExecute; +use vortex_array::arrays::PrimitiveArray; use vortex_buffer::BitBuffer; +use vortex_mask::Mask; use vortex_runend::_benchmarking::filter_run_end_primitive; +use vortex_runend::RunEnd; +use vortex_session::VortexSession; #[global_allocator] static GLOBAL: MiMalloc = MiMalloc; @@ -30,6 +37,12 @@ fn main() { divan::main(); } +static SESSION: LazyLock = LazyLock::new(|| { + let session = vortex_array::array_session(); + vortex_runend::initialize(&session); + session +}); + #[derive(Clone, Copy)] struct FilterBenchArgs { /// Total logical length of the decoded array. @@ -38,50 +51,41 @@ struct FilterBenchArgs { run_length: usize, /// Fraction of mask bits that are set to `true`. density: f64, + /// Bit offset of a sliced predicate mask. + mask_offset: usize, } impl fmt::Display for FilterBenchArgs { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "len={}_run={}_density={:.1}", - self.length, self.run_length, self.density + "len={}_run={}_density={:.1}_offset={}", + self.length, self.run_length, self.density, self.mask_offset ) } } -const FILTER_ARGS: &[FilterBenchArgs] = &[ - FilterBenchArgs { - length: 4_096, - run_length: 16, - density: 0.1, - }, - FilterBenchArgs { - length: 4_096, - run_length: 16, - density: 0.5, - }, - FilterBenchArgs { - length: 4_096, - run_length: 16, - density: 0.9, - }, - FilterBenchArgs { +const FILTER_ARGS: [FilterBenchArgs; 36] = { + let mut args = [FilterBenchArgs { length: 16_384, - run_length: 16, + run_length: 1, density: 0.1, - }, - FilterBenchArgs { - length: 16_384, - run_length: 16, - density: 0.5, - }, - FilterBenchArgs { - length: 16_384, - run_length: 16, - density: 0.9, - }, -]; + mask_offset: 0, + }; 36]; + let lengths = [1, 4, 16, 64, 256, 1024]; + let densities = [0.1, 0.5, 0.9]; + let mut i = 0; + while i < args.len() { + args[i] = FilterBenchArgs { + length: 16_384, + run_length: lengths[i / 6], + density: densities[(i / 2) % 3], + mask_offset: (i % 2) * 3, + }; + i += 1; + } + args +}; /// Build the run-end boundaries (cumulative run lengths) for `length` rows. fn build_run_ends(length: usize, run_length: usize) -> Vec { @@ -107,7 +111,8 @@ fn build_mask(length: usize, density: f64) -> BitBuffer { #[divan::bench(args = FILTER_ARGS)] fn filter_run_end(bencher: Bencher, args: FilterBenchArgs) { let run_ends = build_run_ends(args.length, args.run_length); - let mask = build_mask(args.length, args.density); + let mask = build_mask(args.length + args.mask_offset, args.density) + .slice(args.mask_offset..args.length + args.mask_offset); let length = args.length as u64; bencher .with_inputs(|| (run_ends.clone(), mask.clone())) @@ -115,3 +120,28 @@ fn filter_run_end(bencher: Bencher, args: FilterBenchArgs) { filter_run_end_primitive::(run_ends, 0, length, mask).expect("filter") }); } + +#[divan::bench(args = FILTER_ARGS)] +fn filter_run_end_array(bencher: Bencher, args: FilterBenchArgs) { + let ends = build_run_ends(args.length, args.run_length); + let values = PrimitiveArray::from_iter(0..ends.len() as i64).into_array(); + let array = RunEnd::new( + PrimitiveArray::from_iter(ends).into_array(), + values, + &mut SESSION.create_execution_ctx(), + ) + .into_array(); + let mask = Mask::from( + build_mask(args.length + args.mask_offset, args.density) + .slice(args.mask_offset..args.length + args.mask_offset), + ); + bencher + .with_inputs(|| (array.clone(), mask.clone(), SESSION.create_execution_ctx())) + .bench_values(|(array, mask, mut ctx)| { + array + .filter(mask) + .expect("filter") + .execute::(&mut ctx) + .expect("execute") + }); +} diff --git a/encodings/runend/src/compress.rs b/encodings/runend/src/compress.rs index 8bec50aa937..92f4cfcf757 100644 --- a/encodings/runend/src/compress.rs +++ b/encodings/runend/src/compress.rs @@ -33,9 +33,13 @@ use vortex_buffer::buffer; use vortex_error::VortexExpect; use vortex_error::VortexResult; use vortex_mask::Mask; +use vortex_mask::MaskValues; use crate::iter::trimmed_ends_iter; +/// Prefilling costs more than sequential validity expansion when there are very few runs. +const PREFILL_VALIDITY_RUN_THRESHOLD: usize = 32; + /// Run-end encode a `PrimitiveArray`, returning a tuple of `(ends, values)`. pub fn runend_encode( array: ArrayView, @@ -242,40 +246,60 @@ fn runend_decode_slice( } Mask::AllFalse(_) => (Buffer::::zeroed(length), Validity::AllInvalid), Mask::Values(mask) => { - let mut decoded = BufferMut::with_capacity(length); - let mut decoded_validity = BitBufferMut::with_capacity(length); - for (end, value) in run_ends.zip_eq( - values - .iter() - .zip(mask.bit_buffer().iter()) - .map(|(&v, is_valid)| is_valid.then_some(v)), - ) { - assert!( - end >= decoded.len(), - "Runend ends must be monotonic, got {end} after {}", - decoded.len() - ); - assert!(end <= length, "Runend end must be less than overall length"); - match value { - None => { - decoded_validity.append_n(false, end - decoded.len()); - // SAFETY: - // We preallocate enough capacity because we know the total length - unsafe { decoded.push_n_unchecked(T::default(), end - decoded.len()) }; - } - Some(value) => { - decoded_validity.append_n(true, end - decoded.len()); - // SAFETY: - // We preallocate enough capacity because we know the total length - unsafe { decoded.push_n_unchecked(value, end - decoded.len()) }; - } - } + if values.len() < PREFILL_VALIDITY_RUN_THRESHOLD { + runend_decode_nullable_slice::(run_ends, values, &mask, length) + } else { + runend_decode_nullable_slice::(run_ends, values, &mask, length) } - (decoded.into(), Validity::from(decoded_validity.freeze())) } } } +// Inlining both nullable variants into `runend_decode_slice` slows its non-nullable loop by up +// to 2x in the `run_end_decode` benchmarks. +#[inline(never)] +fn runend_decode_nullable_slice( + run_ends: impl Iterator, + values: &[T], + mask: &MaskValues, + length: usize, +) -> (Buffer, Validity) { + let mut decoded = BufferMut::with_capacity(length); + // Initialize the bitmap once and only overwrite runs with the minority validity. + // Appending every run repeatedly grows the byte length and rewrites shared bytes. + let prefill_valid = PREFILL && mask.true_count() > mask.len() - mask.true_count(); + let mut decoded_validity = if PREFILL { + BitBufferMut::full(prefill_valid, length) + } else { + BitBufferMut::with_capacity(length) + }; + for (end, (&value, is_valid)) in run_ends.zip_eq(values.iter().zip(mask.bit_buffer().iter())) { + let start = decoded.len(); + assert!( + end >= start, + "Runend ends must be monotonic, got {end} after {start}" + ); + assert!(end <= length, "Runend end must be less than overall length"); + if PREFILL { + if is_valid != prefill_valid { + decoded_validity.fill_range(start, end, is_valid); + } + } else { + decoded_validity.append_n(is_valid, end - start); + } + + if is_valid { + // SAFETY: start <= end <= length, and decoded has capacity for length elements. + unsafe { decoded.push_n_unchecked(value, end - start) }; + } else { + // Keep null runs separate so the compiler can use a bulk zero fill. + // SAFETY: start <= end <= length, and decoded has capacity for length elements. + unsafe { decoded.push_n_unchecked(T::default(), end - start) }; + } + } + (decoded.into(), Validity::from(decoded_validity.freeze())) +} + pub fn runend_decode_typed_primitive( run_ends: impl Iterator, values: &[T], @@ -369,16 +393,20 @@ pub fn runend_decode_varbinview( mod tests { use std::sync::LazyLock; + use rstest::rstest; use vortex_array::VortexSessionExecute; use vortex_array::arrays::PrimitiveArray; use vortex_array::assert_arrays_eq; + use vortex_array::dtype::Nullability; use vortex_array::validity::Validity; use vortex_buffer::BitBuffer; use vortex_buffer::buffer; use vortex_error::VortexResult; + use vortex_mask::Mask; use vortex_session::VortexSession; use crate::compress::runend_decode_primitive; + use crate::compress::runend_decode_typed_primitive; use crate::compress::runend_encode; static SESSION: LazyLock = LazyLock::new(|| { @@ -449,4 +477,72 @@ mod tests { assert_arrays_eq!(decoded, expected, &mut ctx); Ok(()) } + + #[rstest] + #[case(vec![1u32, 2, 3], vec![1i64, 2, 3])] + #[case(vec![1u32, 2, 4], vec![1i64, 2, 3])] + #[case(vec![1u32, 3, 4], vec![1i64, 2, 2])] + fn decode_unit_runs_and_truncated_tail( + #[case] ends: Vec, + #[case] expected: Vec, + #[values(0, 3)] offset: u32, + #[values(false, true)] nullable: bool, + ) -> VortexResult<()> { + let values = if nullable { + PrimitiveArray::from_option_iter([Some(1i64), None, Some(3)]) + } else { + PrimitiveArray::from_iter([1i64, 2, 3]) + }; + let expected = if nullable { + PrimitiveArray::from_option_iter( + expected + .into_iter() + .map(|value| (value != 2).then_some(value)), + ) + } else { + PrimitiveArray::from_iter(expected) + }; + let mut ctx = SESSION.create_execution_ctx(); + let decoded = runend_decode_primitive( + PrimitiveArray::from_iter(ends.into_iter().map(|end| end + offset)), + values, + offset as usize, + 3, + &mut ctx, + )?; + assert_arrays_eq!(decoded, expected, &mut ctx); + Ok(()) + } + + #[rstest] + fn decode_nullable_with_sliced_validity( + #[values(16, 65)] run_count: usize, + #[values(1, 2, 3, 64, 4096)] run_length: usize, + #[values(10, 50, 99, 100)] valid_percent: usize, + #[values(0, 3)] validity_offset: usize, + ) -> VortexResult<()> { + let values: Vec = (1..).take(run_count).collect(); + let length = run_count * run_length - 1; + let validity = BitBuffer::from_iter( + (0..run_count + validity_offset).map(|i| (i * 37) % 100 < valid_percent), + ) + .slice(validity_offset..run_count + validity_offset); + let expected = PrimitiveArray::from_option_iter( + values + .iter() + .zip(validity.iter()) + .flat_map(|(&value, valid)| std::iter::repeat_n(valid.then_some(value), run_length)) + .take(length), + ); + let decoded = runend_decode_typed_primitive( + (1..=run_count).map(|i| (i * run_length).min(length)), + &values, + Mask::from(validity), + Nullability::Nullable, + length, + ); + + assert_arrays_eq!(decoded, expected, &mut SESSION.create_execution_ctx()); + Ok(()) + } } diff --git a/encodings/runend/src/compute/filter.rs b/encodings/runend/src/compute/filter.rs index 4dc00ea2aba..04f1413baf0 100644 --- a/encodings/runend/src/compute/filter.rs +++ b/encodings/runend/src/compute/filter.rs @@ -25,6 +25,7 @@ use crate::RunEnd; use crate::array::RunEndArrayExt; use crate::array::RunEndArraySlotsExt; use crate::compute::take::take_indices_unchecked; +use crate::iter::trimmed_ends_iter; /// Takes directly below this average number of selected rows per source run. /// @@ -65,6 +66,20 @@ impl FilterKernel for RunEnd { } let primitive_run_ends = array.ends().clone().execute::(ctx)?; + if source_run_count == array.len() + && match_each_unsigned_integer_ptype!(primitive_run_ends.ptype(), |E| { + trimmed_ends_iter( + primitive_run_ends.as_slice::(), + array.offset(), + array.len(), + ) + .eq(1..=array.len()) + }) + { + // Each logical row is already a run value. Filtering the values directly + // avoids building new run boundaries and decoding the resulting RunEnd. + return Ok(Some(array.values().filter(mask.clone())?)); + } let (filtered_run_ends, values_mask) = match_each_unsigned_integer_ptype!(primitive_run_ends.ptype(), |P| { filter_run_end_primitive( @@ -75,6 +90,11 @@ impl FilterKernel for RunEnd { )? }); let filtered_values = array.values().filter(values_mask)?; + if filtered_run_ends.len() == selected_rows { + // The retained ends are strictly increasing and end at selected_rows, so + // this many retained runs proves that each contains exactly one row. + return Ok(Some(filtered_values)); + } // SAFETY: `filter_run_end_primitive` returns one strictly increasing end for each retained // run value, with the final end equal to `selected_rows`. @@ -146,13 +166,16 @@ pub fn filter_run_end_primitive + AsPrim #[cfg(test)] mod tests { + use rstest::rstest; use vortex_array::IntoArray; use vortex_array::VortexSessionExecute; use vortex_array::arrays::PrimitiveArray; use vortex_array::assert_arrays_eq; + use vortex_buffer::BitBuffer; use vortex_error::VortexResult; use vortex_mask::Mask; + use super::filter_run_end_primitive; use crate::RunEnd; use crate::RunEndArray; use crate::tests::SESSION; @@ -183,6 +206,76 @@ mod tests { Ok(()) } + #[rstest] + #[case([1u32, 2, 3], [Some(1i32), Some(3)])] + #[case([1u32, 2, 4], [Some(1i32), Some(3)])] + #[case([1u32, 3, 4], [Some(1i32), None])] + fn filter_unit_runs_and_clamped_tail( + #[case] ends: [u32; 3], + #[case] expected: [Option; 2], + #[values(0, 3)] offset: u32, + ) -> VortexResult<()> { + let mut ctx = SESSION.create_execution_ctx(); + let ends = (1u32..=62) + .chain(ends.map(|end| end + 62)) + .map(|end| end + offset); + let prefix = (0..62).map(Some); + let array = RunEnd::try_new_offset_length( + PrimitiveArray::from_iter(ends).into_array(), + PrimitiveArray::from_option_iter(prefix.clone().chain([Some(1i32), None, Some(3)])) + .into_array(), + offset as usize, + 65, + &mut ctx, + )?; + let mask = Mask::from_iter(std::iter::repeat_n(true, 62).chain([true, false, true])); + assert_arrays_eq!( + array.filter(mask)?, + PrimitiveArray::from_option_iter(prefix.chain(expected)), + &mut ctx + ); + Ok(()) + } + + #[rstest] + fn filter_sliced_mask_across_words_and_long_runs( + #[values(0, 3, 7)] mask_offset: usize, + #[values(0, 3)] array_offset: u32, + #[values(0, 1, 2, 10)] period: usize, + ) -> VortexResult<()> { + let ends = [1u32, 5, 64, 65, 128, 384, 385, 896, 900]; + let bits: Vec = (0..900 + mask_offset) + .map(|i| period != 0 && i % period == 0) + .collect(); + let mask = BitBuffer::from(bits.clone()).slice(mask_offset..900 + mask_offset); + let bits = &bits[mask_offset..]; + let run_ends: Vec = ends.iter().map(|&end| end + array_offset).collect(); + let mut expected_ends = Vec::new(); + let mut retained = Vec::new(); + let mut start = 0; + let mut count = 0u32; + for end in ends { + let end = end as usize; + let selected: u32 = bits[start..end].iter().copied().map(u32::from).sum(); + count += selected; + retained.push(selected > 0); + if selected > 0 { + expected_ends.push(count); + } + start = end; + } + + let (filtered_ends, values_mask) = + filter_run_end_primitive(&run_ends, u64::from(array_offset), 900, &mask)?; + assert_arrays_eq!( + filtered_ends, + PrimitiveArray::from_iter(expected_ends), + &mut SESSION.create_execution_ctx() + ); + assert_eq!(values_mask, Mask::from_iter(retained)); + Ok(()) + } + /// Regression: Filter(Slice(RunEnd)) must preserve RunEnd after execution. /// Previously Filter.execute() forced its child to canonical, decoding /// Slice(RunEnd) → Primitive and destroying run structure. The fix lets diff --git a/encodings/runend/src/decompress_bool.rs b/encodings/runend/src/decompress_bool.rs index 658138a905e..4b3a4243d3f 100644 --- a/encodings/runend/src/decompress_bool.rs +++ b/encodings/runend/src/decompress_bool.rs @@ -157,6 +157,16 @@ fn decode_bool_non_nullable( ) -> BoolArray { let num_runs = values.len(); + // Comparisons can produce a uniform value for every run. The output bitmap then needs + // no run expansion, even when the input still contains many run boundaries. + let true_runs = values.true_count(); + if true_runs == 0 || true_runs == num_runs { + return BoolArray::new( + BitBufferMut::full(true_runs != 0, length).freeze(), + nullability.into(), + ); + } + // For few runs, sequential append is faster than prefill + modify if num_runs < PREFILL_RUN_THRESHOLD { let mut decoded = BitBufferMut::with_capacity(length); @@ -167,7 +177,7 @@ fn decode_bool_non_nullable( } // Adaptive strategy: prefill with majority value, only flip minority runs - let prefill = values.true_count() > num_runs - values.true_count(); + let prefill = true_runs > num_runs - true_runs; let mut decoded = BitBufferMut::full(prefill, length); let mut current_pos = 0usize; @@ -250,6 +260,7 @@ fn decode_nullable_sequential( mod tests { use std::sync::LazyLock; + use rstest::rstest; use vortex_array::VortexSessionExecute; use vortex_array::arrays::BoolArray; use vortex_array::arrays::PrimitiveArray; @@ -257,6 +268,7 @@ mod tests { use vortex_array::assert_arrays_eq; use vortex_array::validity::Validity; use vortex_buffer::BitBuffer; + use vortex_buffer::BitBufferMut; use vortex_error::VortexResult; use vortex_session::VortexSession; @@ -268,6 +280,31 @@ mod tests { session }); + #[rstest] + fn decode_uniform_runs( + #[values(false, true)] value: bool, + #[values(false, true)] nullable: bool, + #[values(16, 65)] run_count: usize, + #[values(0, 1)] offset: usize, + ) -> VortexResult<()> { + let mut ctx = SESSION.create_execution_ctx(); + let validity = if nullable { + Validity::AllValid + } else { + Validity::NonNullable + }; + let ends = PrimitiveArray::from_iter((1u32..).take(run_count).map(|run| run * 2)); + let values = BoolArray::new( + BitBufferMut::full(value, run_count).freeze(), + validity.clone(), + ); + let length = run_count * 2 - offset - 1; + let decoded = runend_decode_bools(ends, values, offset, length, &mut ctx)?; + let expected = BoolArray::new(BitBufferMut::full(value, length).freeze(), validity); + assert_arrays_eq!(decoded, expected, &mut ctx); + Ok(()) + } + #[test] fn decode_bools_alternating() -> VortexResult<()> { let mut ctx = SESSION.create_execution_ctx(); diff --git a/encodings/runend/src/ops.rs b/encodings/runend/src/ops.rs index 637fa8ecd25..052f94227ea 100644 --- a/encodings/runend/src/ops.rs +++ b/encodings/runend/src/ops.rs @@ -46,7 +46,7 @@ pub fn find_slice_end_index( ctx: &mut ExecutionCtx, ) -> VortexResult { let result = match_each_unsigned_integer_ptype!(array.dtype().as_ptype(), |T| { - SearchSortedPrimitiveArray::::new(array, ctx) + SearchSortedPrimitiveArray::::new_repeated(array, ctx) .search_sorted(&index, SearchSortedSide::Right)? }); Ok(match result { @@ -68,7 +68,7 @@ pub fn find_physical_index( ctx: &mut ExecutionCtx, ) -> VortexResult { match_each_unsigned_integer_ptype!(array.dtype().as_ptype(), |T| { - Ok(SearchSortedPrimitiveArray::::new(array, ctx) + Ok(SearchSortedPrimitiveArray::::new_repeated(array, ctx) .search_sorted(&index, SearchSortedSide::Right)? .to_ends_index(array.len())) }) diff --git a/vortex-array/benches/list_contains_set.rs b/vortex-array/benches/list_contains_set.rs index cdee167ea71..bbbac867f48 100644 --- a/vortex-array/benches/list_contains_set.rs +++ b/vortex-array/benches/list_contains_set.rs @@ -38,7 +38,7 @@ fn main() { // Sized to keep CodSpeed simulation under 1ms per benchmark. const ROWS: usize = 1_024; const CHUNKS: usize = 4; -const SET_LENS: &[usize] = &[256]; +const SET_LENS: &[usize] = &[4, 8, 16, 32, 64, 256]; /// A nested set compares whole rows to sort its elements and to probe them, so it stays smaller. const NESTED_SET_LENS: &[usize] = &[32]; diff --git a/vortex-array/src/scalar_fn/fns/list_contains/mod.rs b/vortex-array/src/scalar_fn/fns/list_contains/mod.rs index 8f075666222..2e2e779b8fa 100644 --- a/vortex-array/src/scalar_fn/fns/list_contains/mod.rs +++ b/vortex-array/src/scalar_fn/fns/list_contains/mod.rs @@ -5,6 +5,7 @@ mod kernel; use std::fmt::Display; use std::fmt::Formatter; +use std::hash::Hash; use std::ops::BitOr; use arrow_buffer::bit_iterator::BitIndexIterator; @@ -18,6 +19,7 @@ use vortex_error::vortex_bail; use vortex_error::vortex_err; use vortex_session::VortexSession; use vortex_session::registry::CachedId; +use vortex_utils::aliases::hash_set::HashSet; use vortex_utils::iter::ReduceBalancedIterExt; use crate::ArrayRef; @@ -41,6 +43,7 @@ use crate::match_each_integer_ptype; use crate::match_each_unsigned_integer_ptype; use crate::proto::expr as pb; use crate::scalar::ListScalar; +use crate::scalar::PValue; use crate::scalar::Scalar; use crate::scalar_fn::Arity; use crate::scalar_fn::ChildName; @@ -48,6 +51,8 @@ use crate::scalar_fn::ExecutionArgs; use crate::scalar_fn::ScalarFnId; use crate::scalar_fn::ScalarFnVTable; use crate::scalar_fn::ScalarFnVTableExt; +use crate::scalar_fn::fns::between::BetweenOptions; +use crate::scalar_fn::fns::between::StrictComparison; use crate::scalar_fn::fns::binary::Binary; use crate::scalar_fn::fns::operators::Operator; use crate::validity::Validity; @@ -291,7 +296,13 @@ fn compute_list_contains( } if let Some(list_scalar) = array.as_constant() { - return constant_list_scalar_contains(&list_scalar.as_list(), value, nullability, options); + return constant_list_scalar_contains( + &list_scalar.as_list(), + value, + nullability, + options, + ctx, + ); } vortex_bail!("unsupported list contains with list and element as arrays") @@ -299,15 +310,24 @@ fn compute_list_contains( /// There is a constant list scalar (haystack) being compared to an array of needles. /// -/// The result stays lazy. `Or` is Kleene, so under SQL null semantics the disjunction of the raw -/// comparisons is already the `IN` answer. +/// Small sets retain encoding-specific comparisons. Larger integer sets use one decode and +/// one membership lookup per row instead of comparing the whole column for every element. fn constant_list_scalar_contains( list_scalar: &ListScalar, values: &ArrayRef, nullability: Nullability, options: &ListContainsOptions, + ctx: &mut ExecutionCtx, ) -> VortexResult { let elements = list_scalar.elements().vortex_expect("non null"); + if elements.len() >= 4 + && let DType::Primitive(ptype, _) = values.dtype() + && ptype.is_int() + { + return match_each_integer_ptype!(*ptype, |T| { + integer_set_contains::(&elements, values, nullability, options, ctx) + }); + } let len = values.len(); let false_scalar = Scalar::bool(false, nullability); @@ -350,6 +370,58 @@ fn constant_list_scalar_contains( Ok(result) } +fn integer_set_contains>( + elements: &[Scalar], + values: &ArrayRef, + nullability: Nullability, + options: &ListContainsOptions, + ctx: &mut ExecutionCtx, +) -> VortexResult { + let mut set = HashSet::with_capacity(elements.len()); + let mut has_null = false; + for element in elements { + match element.as_primitive().try_typed_value::()? { + Some(value) => { + set.insert(value); + } + None => has_null = true, + } + } + + if !(options.sql_null_semantics && has_null) + && let (Some(&min), Some(&max)) = (set.iter().min(), set.iter().max()) + && max.to_i128().vortex_expect("integer fits i128") + - min.to_i128().vortex_expect("integer fits i128") + == (set.len() - 1) as i128 + { + // Consecutive keys, such as all dates in a year, are exactly a range. Preserve + // compressed comparisons rather than decoding the needles for a hash lookup. + return values.clone().between( + ConstantArray::new(Scalar::primitive(min, nullability), values.len()).into_array(), + ConstantArray::new(Scalar::primitive(max, nullability), values.len()).into_array(), + BetweenOptions { + lower_strict: StrictComparison::NonStrict, + upper_strict: StrictComparison::NonStrict, + }, + ); + } + + let values = values.clone().execute::(ctx)?; + let needles = values.as_slice::(); + let matches = BitBuffer::collect_bool_in( + needles.len(), + |i| set.contains(&needles[i]), + ctx.allocator().clone(), + ); + let mut validity = values.validity()?; + if options.sql_null_semantics && has_null { + // A matching non-null needle decides IN even when the list contains null. All + // other needles are unknown; physical values in null rows must never decide it. + validity = validity.and(Validity::from(matches.clone()))?; + } + Ok(BoolArray::new(matches, validity.union_nullability(nullability)).into_array()) +} + /// Returns a [`BoolArray`] where each bit represents if a list contains the scalar. /// /// This is the canonical implementation, over an executed [`ListViewArray`]. @@ -613,8 +685,10 @@ mod tests { use crate::arrays::PrimitiveArray; use crate::arrays::VarBinArray; use crate::assert_arrays_eq; + use crate::builtins::ArrayBuiltins; use crate::dtype::DType; use crate::dtype::Nullability; + use crate::dtype::PType; use crate::dtype::PType::I32; use crate::dtype::StructFields; use crate::expr::Expression; @@ -1299,6 +1373,146 @@ mod tests { ) } + #[rstest] + #[case::default(ListContainsOptions::default())] + #[case::sql(SQL)] + fn large_integer_set_preserves_null_semantics( + #[case] options: ListContainsOptions, + #[values( + PType::U8, PType::U16, PType::U32, PType::U64, PType::I8, PType::I16, I32, PType::I64 + )] + ptype: PType, + #[values(4, 16)] set_len: i32, + #[values(false, true)] has_null: bool, + #[values(0, 3)] offset: usize, + ) -> VortexResult<()> { + let dtype = DType::Primitive(ptype, Nullability::Nullable); + let mut elements = (0..set_len) + .map(|value| Scalar::from(2 * value + 1).cast(&dtype)) + .collect::>>()?; + elements.push(Scalar::from(7i32).cast(&dtype)?); + if has_null { + elements.push(Scalar::null(dtype.clone())); + } + let set = Scalar::list(Arc::new(dtype.clone()), elements, Nullability::NonNullable); + // The null needle deliberately has the physical value of a member. + let needles = PrimitiveArray::new( + buffer![99i32, 99, 99, 7, 7, 22, 1], + Validity::from(BitBuffer::from_iter([ + true, true, true, true, false, true, true, + ])), + ) + .into_array() + .slice(offset..7)? + .cast(dtype)?; + let result = needles.apply(&list_contains_opts(lit(set), root(), options))?; + assert_eq!(result.dtype(), &DType::Bool(Nullability::Nullable)); + let miss = if options.sql_null_semantics && has_null { + None + } else { + Some(false) + }; + let expected = [miss, miss, miss, Some(true), None, miss, Some(true)]; + assert_result(Ok(result), expected[offset..].iter().copied()) + } + + #[rstest] + #[case::default(ListContainsOptions::default(), Some(false))] + #[case::sql(SQL, None)] + fn large_integer_set_of_only_nulls( + #[case] options: ListContainsOptions, + #[case] non_null_result: Option, + ) -> VortexResult<()> { + let needles = PrimitiveArray::from_option_iter([Some(1i32), None]).into_array(); + assert_result( + needles.apply(&list_contains_opts( + lit(i32_set(vec![None; 16])), + root(), + options, + )), + [non_null_result, None], + ) + } + + #[rstest] + #[case::default(ListContainsOptions::default())] + #[case::sql(SQL)] + fn consecutive_integer_set_preserves_null_semantics( + #[case] options: ListContainsOptions, + #[values( + PType::U8, PType::U16, PType::U32, PType::U64, PType::I8, PType::I16, I32, PType::I64 + )] + ptype: PType, + #[values(false, true)] has_null: bool, + ) -> VortexResult<()> { + let dtype = DType::Primitive(ptype, Nullability::Nullable); + let mut elements = [10i32, 7, 8, 9, 7] + .into_iter() + .map(|value| Scalar::from(value).cast(&dtype)) + .collect::>>()?; + if has_null { + elements.push(Scalar::null(dtype.clone())); + } + let set = Scalar::list(Arc::new(dtype.clone()), elements, Nullability::NonNullable); + let needles = PrimitiveArray::from_option_iter([ + Some(6i32), + Some(7), + Some(8), + Some(10), + Some(11), + None, + ]) + .into_array() + .cast(dtype)?; + let result = needles.apply(&list_contains_opts(lit(set), root(), options))?; + assert_eq!(result.dtype(), &DType::Bool(Nullability::Nullable)); + let miss = if options.sql_null_semantics && has_null { + None + } else { + Some(false) + }; + assert_result( + Ok(result), + [miss, Some(true), Some(true), Some(true), miss, None], + ) + } + + #[rstest] + #[case::minimum(vec![i64::MIN, i64::MIN + 1, i64::MIN + 2, i64::MIN + 3])] + #[case::maximum(vec![i64::MAX - 3, i64::MAX - 2, i64::MAX - 1, i64::MAX])] + #[case::gap(vec![-5, -3, -1, 1])] + #[case::duplicates(vec![7, 7, 7, 7])] + #[case::wide(vec![i64::MIN, -1, 0, i64::MAX])] + fn integer_set_range_boundaries(#[case] elements: Vec) -> VortexResult<()> { + let needles = [ + i64::MIN, + i64::MIN + 1, + -5, + -4, + 0, + 1, + 7, + 8, + i64::MAX - 1, + i64::MAX, + ]; + let expected = needles.map(|value| elements.contains(&value)); + let set = Scalar::list( + Arc::new(DType::Primitive(PType::I64, Nullability::NonNullable)), + elements.into_iter().map(Scalar::from).collect(), + Nullability::NonNullable, + ); + let result = PrimitiveArray::from_iter(needles) + .into_array() + .apply(&list_contains_opts(lit(set), root(), SQL))?; + assert_arrays_eq!( + result, + BoolArray::from_iter(expected), + &mut array_session().create_execution_ctx() + ); + Ok(()) + } + #[test] fn sql_semantics_without_a_null_element_match_the_default() -> VortexResult<()> { let needles = PrimitiveArray::from_option_iter([Some(1), Some(2), None]).into_array(); diff --git a/vortex-array/src/search_sorted/primitive.rs b/vortex-array/src/search_sorted/primitive.rs index 3da28c7be2b..864c72f6d5b 100644 --- a/vortex-array/src/search_sorted/primitive.rs +++ b/vortex-array/src/search_sorted/primitive.rs @@ -5,10 +5,13 @@ use std::cell::RefCell; use std::cmp::Ordering; use std::marker::PhantomData; +use vortex_buffer::Buffer; use vortex_error::VortexResult; use crate::ArrayRef; use crate::ExecutionCtx; +use crate::RepeatedArrayProbe; +use crate::arrays::Primitive; use crate::dtype::NativePType; use crate::search_sorted::IndexOrd; @@ -36,6 +39,17 @@ impl<'a, T: NativePType> SearchSortedPrimitiveArray<'a, T> { Self(array, RefCell::new(ctx), PhantomData) } + /// Retain compressed probe preparation between comparisons and searches. + /// + /// The returned adapter is local to a thread. Use [`Self::new`] when the adapter must be + /// transferable between threads. + pub fn new_repeated( + array: &'a ArrayRef, + ctx: &'a mut ExecutionCtx, + ) -> impl IndexOrd + IndexOrd> + IndexOrd + 'a { + RepeatedSearchSortedPrimitiveArray::::new(array, ctx) + } + /// Returns the value at `idx`, with nulls mapped to `T::zero()`. fn value(&self, idx: usize) -> VortexResult { Ok(self @@ -93,6 +107,109 @@ impl IndexOrd for SearchSortedPrimitiveArray<'_, T> { } } +/// A [`SearchSorted`](crate::search_sorted::SearchSorted) adapter over a sorted primitive-typed +/// array, comparing elements as the native type `T`. +/// +/// Values can be searched as `T`, `Option`, or `usize`. Searching as `T` or `usize` treats +/// null elements as `T::zero()`; use `Option` when the array may contain nulls, in which case +/// nulls sort before all non-null values. +/// +/// Compressed arrays retain probe preparation between comparisons and searches. +struct RepeatedSearchSortedPrimitiveArray<'a, T> { + array: &'a ArrayRef, + values: Option>, + probe: RefCell, + ctx: RefCell<&'a mut ExecutionCtx>, +} + +impl<'a, T: NativePType> RepeatedSearchSortedPrimitiveArray<'a, T> { + /// Wraps `array` for searching, panicking if the array's [`PType`](crate::dtype::PType) is + /// not `T::PTYPE`. + fn new(array: &'a ArrayRef, ctx: &'a mut ExecutionCtx) -> Self { + assert_eq!( + array.dtype().as_ptype(), + T::PTYPE, + "Array PType must match primitive type" + ); + let values = if array.dtype().is_nullable() { + None + } else { + array + .as_opt::() + .map(|array| array.to_buffer::()) + }; + Self { + array, + values, + probe: RefCell::new(array.repeated_probe()), + ctx: RefCell::new(ctx), + } + } + + /// Returns the value at `idx`, with nulls mapped to `T::zero()`. + fn value(&self, idx: usize) -> VortexResult { + if let Some(value) = self.values.as_ref().and_then(|values| values.get(idx)) { + return Ok(*value); + } + Ok(self + .probe + .borrow_mut() + .execute_scalar(idx, &mut self.ctx.borrow_mut())? + .as_primitive() + .typed_value::() + .unwrap_or_else(|| T::zero())) + } +} + +impl IndexOrd for RepeatedSearchSortedPrimitiveArray<'_, T> { + fn index_cmp(&self, idx: usize, elem: &T) -> VortexResult> { + let value = self.value(idx)?; + Ok(Some(value.total_compare(*elem))) + } + + fn index_len(&self) -> usize { + self.array.len() + } +} + +impl IndexOrd> for RepeatedSearchSortedPrimitiveArray<'_, T> { + fn index_cmp(&self, idx: usize, elem: &Option) -> VortexResult> { + // The borrow must end before `self.value` re-borrows the ctx. + let valid = self + .probe + .borrow_mut() + .execute_is_valid(idx, &mut self.ctx.borrow_mut())?; + let value = valid.then(|| self.value(idx)).transpose()?; + + Ok(match (value, elem.as_ref()) { + (Some(l), Some(r)) => Some(l.total_compare(*r)), + (Some(_), None) => Some(Ordering::Greater), + (None, Some(_)) => Some(Ordering::Less), + (None, None) => Some(Ordering::Equal), + }) + } + + fn index_len(&self) -> usize { + self.array.len() + } +} + +impl IndexOrd for RepeatedSearchSortedPrimitiveArray<'_, T> { + fn index_cmp(&self, idx: usize, elem: &usize) -> VortexResult> { + let value = self.value(idx)?; + + let Some(elem_t) = T::from_usize(*elem) else { + return Ok(Some(Ordering::Less)); + }; + + Ok(Some(value.total_compare(elem_t))) + } + + fn index_len(&self) -> usize { + self.array.len() + } +} + #[cfg(test)] mod tests { use vortex_buffer::buffer; @@ -108,6 +225,13 @@ mod tests { use crate::search_sorted::SearchSortedSide; use crate::validity::Validity; + fn assert_send() {} + + #[test] + fn search_sorted_adapter_is_send() { + assert_send::>(); + } + #[test] fn search_sorted_optional_value() -> VortexResult<()> { let array = PrimitiveArray::new(buffer![1i32, 2, 3, 4], Validity::AllValid).into_array(); diff --git a/vortex-datafusion/Cargo.toml b/vortex-datafusion/Cargo.toml index 5335af982d0..25460ab2f8d 100644 --- a/vortex-datafusion/Cargo.toml +++ b/vortex-datafusion/Cargo.toml @@ -32,6 +32,7 @@ datafusion-pruning = { workspace = true } futures = { workspace = true } itertools = { workspace = true } object_store = { workspace = true } +parking_lot = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread", "fs"] } tokio-stream = { workspace = true } tracing = { workspace = true, features = ["std", "attributes"] } diff --git a/vortex-datafusion/src/persistent/opener.rs b/vortex-datafusion/src/persistent/opener.rs index 385c18ab0a4..cba9db37110 100644 --- a/vortex-datafusion/src/persistent/opener.rs +++ b/vortex-datafusion/src/persistent/opener.rs @@ -22,6 +22,7 @@ use datafusion_datasource::file_stream::FileOpenFuture; use datafusion_datasource::file_stream::FileOpener; use datafusion_execution::cache::cache_manager::CachedFileMetadataEntry; use datafusion_execution::cache::cache_manager::FileMetadataCache; +use datafusion_physical_expr::DynamicFilterTracking; use datafusion_physical_expr::PhysicalExprRef; use datafusion_physical_expr::expressions::LambdaExpr; use datafusion_physical_expr::projection::ProjectionExprs; @@ -30,6 +31,7 @@ use datafusion_physical_expr::split_conjunction; use datafusion_physical_expr::utils::reassign_expr_columns; use datafusion_physical_expr_adapter::PhysicalExprAdapterFactory; use datafusion_physical_expr_adapter::replace_columns_with_literals; +use datafusion_physical_expr_common::physical_expr::snapshot_physical_expr; use datafusion_physical_plan::metrics::ExecutionPlanMetricsSet; use datafusion_physical_plan::metrics::MetricBuilder; use datafusion_physical_plan::metrics::MetricCategory; @@ -39,16 +41,26 @@ use futures::StreamExt; use futures::TryStreamExt; use futures::stream; use object_store::path::Path; +use parking_lot::Mutex; use tracing::Instrument; use vortex::array::VortexSessionExecute; +use vortex::array::builtins::ArrayBuiltins; +use vortex::dtype::DType; use vortex::error::VortexError; use vortex::error::VortexExpect; +use vortex::error::VortexResult; +use vortex::expr::BoundExpression; use vortex::file::OpenOptionsSessionExt; use vortex::io::InstrumentedReadAt; use vortex::layout::LayoutReader; use vortex::layout::scan::scan_builder::ScanBuilder; +use vortex::mask::Mask; use vortex::metrics::Label; use vortex::metrics::MetricsRegistry; +use vortex::scalar_fn::fns::binary::Binary; +use vortex::scalar_fn::fns::list_contains::ListContains; +use vortex::scalar_fn::fns::literal::Literal; +use vortex::scalar_fn::fns::operators::Operator; use vortex::session::VortexSession; use vortex_arrow::ArrowSessionExt; use vortex_utils::aliases::dash_map::DashMap; @@ -78,6 +90,10 @@ pub(crate) struct VortexOpener { /// This may be a subset of file_pruning_predicate containing only expressions /// that Vortex can efficiently evaluate. pub filter: Option, + /// Runtime pruning hints; evaluated natively when the scan schema matches the output. + pub dynamic_filter: Option, + /// Runtime predicate snapshots shared by all partitions reading the same file. + pub dynamic_predicate_caches: Arc, /// Filter expression used by DataFusion's FilePruner to eliminate files based on /// statistics and partition values without opening them. pub file_pruning_predicate: Option, @@ -110,6 +126,80 @@ pub(crate) struct VortexOpener { pub scan_concurrency: Option, } +pub(crate) type DynamicPredicateCaches = DashMap>>; + +pub(crate) struct DynamicPredicateCache { + tracking: DynamicFilterTracking, + initialized: bool, + predicate: Option>, +} + +impl DynamicPredicateCache { + fn new(filter: &PhysicalExprRef) -> Self { + Self { + tracking: DynamicFilterTracking::classify(filter), + initialized: false, + predicate: None, + } + } + + fn current( + &mut self, + filter: &PhysicalExprRef, + convertor: &dyn ExpressionConvertor, + schema: &Schema, + dtype: &DType, + ) -> VortexResult>> { + let changed = self + .tracking + .watcher() + .is_some_and(|watcher| watcher.changed()); + if self.initialized && !changed { + return Ok(self.predicate.clone()); + } + let snapshot = snapshot_physical_expr(Arc::clone(filter)) + .map_err(|e| vortex::error::vortex_err!("Failed to snapshot dynamic filter: {e}"))?; + let predicates = split_conjunction(&snapshot) + .into_iter() + .filter(|expr| convertor.can_be_pushed_down(expr, schema)) + .cloned() + .collect::>(); + self.predicate = make_vortex_predicate(convertor, &predicates) + .map_err(|e| vortex::error::vortex_err!("Failed to convert dynamic filter: {e}"))? + .map(|predicate| predicate.bind(dtype)?.optimize_recursive()) + .transpose()? + .map(|predicate| { + let mut conjuncts = Vec::new(); + collect_dynamic_conjuncts(&predicate, &mut conjuncts); + Arc::from(conjuncts) + }); + self.initialized = true; + Ok(self.predicate.clone()) + } +} + +fn collect_dynamic_conjuncts(predicate: &BoundExpression, conjuncts: &mut Vec) { + if predicate.as_opt::() == Some(&Operator::And) { + collect_dynamic_conjuncts(predicate.child(0), conjuncts); + collect_dynamic_conjuncts(predicate.child(1), conjuncts); + } else if efficient_dynamic_predicate(predicate) { + conjuncts.push(predicate.clone()); + } +} + +fn efficient_dynamic_predicate(predicate: &BoundExpression) -> bool { + if predicate.is::() + && let Some(list) = predicate.child(0).as_opt::() + && list.as_list().len() >= 4 + && !matches!(predicate.child(1).dtype(), DType::Primitive(ptype, _) if ptype.is_int()) + { + // Non-integer membership still compares the column once per list element. + // Runtime lists can contain thousands of keys, so keep this work with the parent. + return false; + } + predicate.children().iter().all(efficient_dynamic_predicate) +} + impl FileOpener for VortexOpener { fn open(&self, file: PartitionedFile) -> DFResult { // Calculate the output schema before replacing partition columns with literals so it @@ -127,6 +217,12 @@ impl FileOpener for VortexOpener { let mut projection = self.projection.clone(); let mut filter = self.filter.clone(); + let dynamic_filter = self + .dynamic_filter + .as_ref() + .map(|filter| reassign_expr_columns(Arc::clone(filter), &output_schema)) + .transpose()?; + let dynamic_predicate_caches = Arc::clone(&self.dynamic_predicate_caches); let reader = self.vortex_reader_factory.create_reader(&file, &session)?; @@ -324,6 +420,25 @@ impl FileOpener for VortexOpener { .try_map_exprs(|expr| reassign_expr_columns(expr, &stream_schema))?; let projector = leftover_projection.make_projector(&stream_schema)?; + // Apply supported runtime predicates to compressed columns when no schema + // adaptation remains. Other predicates remain with DataFusion. + let native_dynamic_filter = if projection_pushdown && stream_schema == *output_schema { + dynamic_filter.clone().map(|filter| { + let cache = Arc::clone( + dynamic_predicate_caches + .entry(file.path().clone()) + .or_insert_with(|| { + Arc::new(Mutex::new(DynamicPredicateCache::new(&filter))) + }) + .value(), + ); + (filter, cache) + }) + } else { + None + }; + let dynamic_schema = Arc::clone(&output_schema); + let dynamic_convertor = Arc::clone(&expr_convertor); // We share our layout readers with others partitions in the scan, so we can only need to read each layout in each file once. let layout_reader = match layout_readers.entry(file.object_meta.location.clone()) { Entry::Occupied(mut occupied_entry) => { @@ -396,6 +511,7 @@ impl FileOpener for VortexOpener { if let Some(limit) = limit && filter.is_none() + && dynamic_filter.is_none() { scan_builder = scan_builder.with_limit(limit); } @@ -445,9 +561,44 @@ impl FileOpener for VortexOpener { let stream = scan_builder .with_metrics_registry(metrics_registry) .with_ordered(has_output_ordering) - .map(move |chunk| { + .map(move |mut chunk| { let mut ctx = session.create_execution_ctx(); let arrow_session = ctx.session().clone(); + if let Some((filter, cache)) = &native_dynamic_filter { + // Translate and bind once per update, then share the immutable predicate + // across splits. Release the cache lock before evaluating any array. + let predicate = cache.lock().current( + filter, + dynamic_convertor.as_ref(), + &dynamic_schema, + chunk.dtype(), + )?; + if let Some(predicates) = predicate { + let mut pending = Mask::AllTrue(chunk.len()); + for predicate in predicates.iter() { + if chunk.is_empty() { + break; + } + let mask = chunk + .clone() + .apply_bound(predicate)? + .fill_null(false)? + .execute::(&mut ctx)?; + pending = pending & &mask; + // Sparse results make subsequent column work much cheaper. + // Otherwise combine masks before gathering projected values. + if pending.true_count() <= chunk.len() / 10 { + chunk = chunk.filter(pending)?; + pending = Mask::AllTrue(chunk.len()); + } + } + // The parent still enforces the full predicate. Avoid a dense + // gather when pruning removes fewer than one row in twenty. + if chunk.len() - pending.true_count() >= chunk.len().div_ceil(20) { + chunk = chunk.filter(pending)?; + } + } + } let arrow = arrow_session.arrow().execute_arrow( chunk, Some(&stream_target_field), @@ -664,6 +815,7 @@ mod tests { use datafusion::arrow::array::StringArray; use datafusion::arrow::array::StructArray; use datafusion::arrow::datatypes::DataType; + use datafusion::arrow::datatypes::Int32Type; use datafusion::arrow::datatypes::Schema; use datafusion::arrow::datatypes::UInt32Type; use datafusion::arrow::util::display::FormatOptions; @@ -679,6 +831,7 @@ mod tests { use datafusion_expr::Operator; use datafusion_physical_expr::PhysicalExpr; use datafusion_physical_expr::expressions as df_expr; + use datafusion_physical_expr::expressions::DynamicFilterPhysicalExpr; use datafusion_physical_expr::projection::ProjectionExpr; use insta::assert_snapshot; use itertools::Itertools; @@ -686,11 +839,24 @@ mod tests { use object_store::memory::InMemory; use rstest::rstest; use vortex::VortexSessionDefault; + use vortex::array::IntoArray; + use vortex::array::arrays::BoolArray; + use vortex::array::arrays::PrimitiveArray; + use vortex::array::arrays::StructArray as VortexStructArray; + use vortex::array::assert_arrays_eq; use vortex::buffer::Buffer; + use vortex::dtype::Nullability; + use vortex::expr::and; + use vortex::expr::eq; + use vortex::expr::list_contains; + use vortex::expr::lit as vortex_lit; + use vortex::expr::or; + use vortex::expr::root; use vortex::file::WriteOptionsSessionExt; use vortex::io::VortexWrite; use vortex::io::object_store::ObjectStoreWrite; use vortex::metrics::DefaultMetricsRegistry; + use vortex::scalar::Scalar; use vortex::scan::selection::Selection; use vortex::scan::strict_sorted_buffer::StrictSortedBuffer; use vortex::session::VortexSession; @@ -869,6 +1035,8 @@ mod tests { vortex_reader_factory: Arc::new(DefaultVortexReaderFactory::new(object_store)), projection: ProjectionExprs::from_indices(&[0], table_schema.file_schema()), filter, + dynamic_filter: None, + dynamic_predicate_caches: Arc::new(DashMap::default()), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema, @@ -886,6 +1054,363 @@ mod tests { } } + #[rstest] + #[tokio::test] + async fn dynamic_filter_observes_update_after_open( + #[values(false, true)] projection_pushdown: bool, + #[values(false, true)] unsupported_conjunct: bool, + #[values(false, true)] additional_conjunct: bool, + ) -> anyhow::Result<()> { + let object_store = Arc::new(InMemory::new()) as Arc; + let batch = record_batch!( + ("a", Int32, vec![Some(1), None, Some(3), Some(4)]), + ("b", Int32, vec![10, 20, 30, 40]) + )?; + let size = + write_arrow_to_vortex(Arc::clone(&object_store), "dynamic.vortex", batch).await?; + // The table widens a file column, and the scan returns columns in a different order. + let table_schema = TableSchema::from(Arc::new(Schema::new(vec![ + Field::new("a", DataType::Int64, true), + Field::new("b", DataType::Int32, false), + ]))); + let column = Arc::new(df_expr::Column::new("a", 0)) as PhysicalExprRef; + let filter = Arc::new(DynamicFilterPhysicalExpr::new( + vec![ + Arc::clone(&column), + Arc::new(df_expr::Column::new("b", 1)) as PhysicalExprRef, + ], + df_expr::lit(true), + )); + let mut opener = make_opener(object_store, table_schema.clone(), None); + opener.projection = ProjectionExprs::from_indices(&[1, 0], table_schema.file_schema()); + opener.projection_pushdown = projection_pushdown; + opener.dynamic_filter = Some(Arc::clone(&filter) as PhysicalExprRef); + opener.limit = Some(1); + + let stream = opener + .open(PartitionedFile::new("dynamic.vortex", size))? + .await?; + let mut predicate = Arc::new(df_expr::BinaryExpr::new( + Arc::clone(&column), + Operator::GtEq, + df_expr::lit(3i64), + )) as PhysicalExprRef; + if unsupported_conjunct { + let odd = Arc::new(df_expr::BinaryExpr::new( + Arc::new(df_expr::BinaryExpr::new( + column, + Operator::BitwiseAnd, + df_expr::lit(1i64), + )), + Operator::Eq, + df_expr::lit(1i64), + )); + predicate = Arc::new(df_expr::BinaryExpr::new(predicate, Operator::And, odd)); + } + if additional_conjunct { + predicate = Arc::new(df_expr::BinaryExpr::new( + predicate, + Operator::And, + Arc::new(df_expr::BinaryExpr::new( + Arc::new(df_expr::Column::new("b", 1)), + Operator::Lt, + df_expr::lit(40i32), + )), + )); + } + filter.update(predicate)?; + let batches: Vec = stream.try_collect().await?; + let rows: Vec<_> = batches + .iter() + .flat_map(|batch| { + batch + .column(0) + .as_primitive::() + .values() + .iter() + .copied() + }) + .collect(); + if !projection_pushdown { + assert_eq!(rows, [10, 20, 30, 40]); + } else if additional_conjunct { + assert_eq!(rows, [30]); + } else { + // Native runtime predicates are hints; the parent enforces unsupported conjuncts. + assert_eq!(rows, [30, 40]); + } + assert!( + batches + .iter() + .all(|batch| batch.column(1).data_type() == &DataType::Int64) + ); + Ok(()) + } + + #[test] + fn dynamic_predicate_cache_observes_supported_and_unsupported_updates() -> anyhow::Result<()> { + let schema = Schema::new(vec![Field::new("a", DataType::Int32, false)]); + let input = VortexStructArray::from_fields(&[( + "a", + PrimitiveArray::from_iter([1i32, 2, 3, 4]).into_array(), + )])? + .into_array(); + let column = Arc::new(df_expr::Column::new("a", 0)) as PhysicalExprRef; + let dynamic = Arc::new(DynamicFilterPhysicalExpr::new( + vec![Arc::clone(&column)], + df_expr::lit(true), + )); + let filter = Arc::clone(&dynamic) as PhysicalExprRef; + let convertor = DefaultExpressionConvertor::new(SESSION.clone()); + let mut cache = DynamicPredicateCache::new(&filter); + let initial = cache.current(&filter, &convertor, &schema, input.dtype())?; + assert_eq!( + cache.current(&filter, &convertor, &schema, input.dtype())?, + initial + ); + dynamic.update(Arc::new(df_expr::BinaryExpr::new( + Arc::clone(&column), + Operator::Gt, + df_expr::lit(2i32), + )))?; + let predicate = cache + .current(&filter, &convertor, &schema, input.dtype())? + .ok_or_else(|| anyhow::anyhow!("missing native predicate"))?; + assert_arrays_eq!( + input.clone().apply_bound(&predicate[0])?, + BoolArray::from_iter([false, false, true, true]), + &mut SESSION.create_execution_ctx() + ); + + dynamic.update(Arc::new(df_expr::BinaryExpr::new( + Arc::new(df_expr::BinaryExpr::new( + column, + Operator::BitwiseAnd, + df_expr::lit(1i32), + )), + Operator::Eq, + df_expr::lit(1i32), + )))?; + assert!( + cache + .current(&filter, &convertor, &schema, input.dtype())? + .is_none() + ); + dynamic.update(df_expr::lit(true))?; + assert_eq!( + cache.current(&filter, &convertor, &schema, input.dtype())?, + initial + ); + Ok(()) + } + + #[rstest] + fn dynamic_membership_keeps_large_non_integer_lists_with_parent( + #[values(false, true)] integer: bool, + #[values(3, 4, 256)] set_len: i64, + ) -> anyhow::Result<()> { + let elements = (0..set_len) + .map(|i| { + if integer { + Scalar::from(i) + } else { + Scalar::utf8(i.to_string(), Nullability::NonNullable) + } + }) + .collect::>(); + let dtype = elements[0].dtype().clone(); + let list = Scalar::list(dtype.clone(), elements, Nullability::NonNullable); + let predicate = list_contains(vortex_lit(list), root()).bind(&dtype)?; + assert_eq!( + efficient_dynamic_predicate(&predicate), + integer || set_len < 4 + ); + Ok(()) + } + + #[test] + fn expensive_dynamic_membership_is_removed_only_from_conjunctions() -> anyhow::Result<()> { + let dtype = DType::Utf8(Nullability::NonNullable); + let list = Scalar::list( + dtype.clone(), + ["a", "b", "c", "d"] + .map(|value| Scalar::utf8(value, Nullability::NonNullable)) + .to_vec(), + Nullability::NonNullable, + ); + let membership = list_contains(vortex_lit(list), root()); + let comparison = eq(root(), vortex_lit("a")); + let mut conjuncts = Vec::new(); + collect_dynamic_conjuncts( + &and(membership.clone(), comparison.clone()).bind(&dtype)?, + &mut conjuncts, + ); + assert_eq!(conjuncts, [comparison.bind(&dtype)?]); + conjuncts.clear(); + collect_dynamic_conjuncts(&or(membership, comparison).bind(&dtype)?, &mut conjuncts); + assert!(conjuncts.is_empty()); + Ok(()) + } + + #[rstest] + #[tokio::test] + async fn expensive_runtime_membership_preserves_optional_pruning( + #[values(false, true)] disjunction: bool, + ) -> anyhow::Result<()> { + let object_store = Arc::new(InMemory::new()) as Arc; + let batch = record_batch!( + ("a", Int32, vec![1, 2, 3, 4]), + ("state", Utf8, vec!["GA", "CA", "TX", "FL"]) + )?; + let schema = TableSchema::from(batch.schema()); + let size = + write_arrow_to_vortex(Arc::clone(&object_store), "membership.vortex", batch).await?; + let a = Arc::new(df_expr::Column::new("a", 0)) as PhysicalExprRef; + let state = Arc::new(df_expr::Column::new("state", 1)) as PhysicalExprRef; + let membership = Arc::new(df_expr::InListExpr::try_new( + Arc::clone(&state), + vec![df_expr::lit("GA"); 4], + false, + schema.file_schema(), + )?); + let range = Arc::new(df_expr::BinaryExpr::new( + Arc::clone(&a), + Operator::GtEq, + df_expr::lit(3i32), + )); + let predicate = Arc::new(df_expr::BinaryExpr::new( + range, + if disjunction { + Operator::Or + } else { + Operator::And + }, + membership, + )); + let dynamic = Arc::new(DynamicFilterPhysicalExpr::new(vec![a, state], predicate)); + let mut opener = make_opener(object_store, schema.clone(), None); + opener.projection = ProjectionExprs::from_indices(&[0, 1], schema.file_schema()); + opener.projection_pushdown = true; + opener.dynamic_filter = Some(dynamic as PhysicalExprRef); + let stream = opener + .open(PartitionedFile::new("membership.vortex", size))? + .await?; + let batches: Vec = stream.try_collect().await?; + let values: Vec<_> = batches + .iter() + .flat_map(|batch| { + batch + .column(0) + .as_primitive::() + .values() + .iter() + .copied() + }) + .collect(); + assert_eq!( + values, + if disjunction { + vec![1, 2, 3, 4] + } else { + vec![3, 4] + } + ); + Ok(()) + } + + #[tokio::test] + async fn shared_dynamic_cache_observes_updates_between_partitions() -> anyhow::Result<()> { + let object_store = Arc::new(InMemory::new()) as Arc; + let batch = record_batch!(("a", Int32, vec![1, 2, 3, 4]))?; + let schema = TableSchema::from(batch.schema()); + let size = write_arrow_to_vortex(Arc::clone(&object_store), "shared.vortex", batch).await?; + let column = Arc::new(df_expr::Column::new("a", 0)) as PhysicalExprRef; + let dynamic = Arc::new(DynamicFilterPhysicalExpr::new( + vec![Arc::clone(&column)], + df_expr::lit(true), + )); + let mut opener = make_opener(object_store, schema, None); + opener.projection_pushdown = true; + opener.dynamic_filter = Some(Arc::clone(&dynamic) as PhysicalExprRef); + let file = PartitionedFile::new("shared.vortex", size); + let first = opener.open(file.clone())?.await?; + let batches: Vec = first.try_collect().await?; + assert_eq!(batches.iter().map(RecordBatch::num_rows).sum::(), 4); + + let mut next_partition = opener.clone(); + next_partition.partition += 1; + let second = next_partition.open(file)?.await?; + dynamic.update(Arc::new(df_expr::BinaryExpr::new( + column, + Operator::Gt, + df_expr::lit(2i32), + )))?; + let batches: Vec = second.try_collect().await?; + let values: Vec<_> = batches + .iter() + .flat_map(|batch| { + batch + .column(0) + .as_primitive::() + .values() + .iter() + .copied() + }) + .collect(); + assert_eq!(values, [3, 4]); + Ok(()) + } + + #[tokio::test] + async fn dynamic_conjuncts_preserve_row_coordinates_after_sparse_filter() -> anyhow::Result<()> + { + let object_store = Arc::new(InMemory::new()) as Arc; + let batch = record_batch!( + ("a", Int32, (1..=100).collect::>()), + ("b", Int32, (1..=100).rev().collect::>()) + )?; + let schema = TableSchema::from(batch.schema()); + let size = + write_arrow_to_vortex(Arc::clone(&object_store), "conjuncts.vortex", batch).await?; + let a = Arc::new(df_expr::Column::new("a", 0)) as PhysicalExprRef; + let b = Arc::new(df_expr::Column::new("b", 1)) as PhysicalExprRef; + let predicate = Arc::new(df_expr::BinaryExpr::new( + Arc::new(df_expr::BinaryExpr::new( + Arc::clone(&a), + Operator::GtEq, + df_expr::lit(96i32), + )), + Operator::And, + Arc::new(df_expr::BinaryExpr::new( + Arc::clone(&b), + Operator::LtEq, + df_expr::lit(3i32), + )), + )); + let dynamic = Arc::new(DynamicFilterPhysicalExpr::new(vec![a, b], predicate)); + let mut opener = make_opener(object_store, schema.clone(), None); + opener.projection = ProjectionExprs::from_indices(&[0, 1], schema.file_schema()); + opener.projection_pushdown = true; + opener.dynamic_filter = Some(dynamic as PhysicalExprRef); + let stream = opener + .open(PartitionedFile::new("conjuncts.vortex", size))? + .await?; + let batches: Vec = stream.try_collect().await?; + let values: Vec<_> = batches + .iter() + .flat_map(|batch| { + batch + .column(0) + .as_primitive::() + .values() + .iter() + .copied() + }) + .collect(); + assert_eq!(values, [98, 99, 100]); + Ok(()) + } + #[tokio::test] async fn test_open() -> anyhow::Result<()> { let object_store = Arc::new(InMemory::new()) as Arc; @@ -1153,6 +1678,8 @@ mod tests { ))), projection: ProjectionExprs::from_indices(&[0], table_schema.file_schema()), filter: Some(filter), + dynamic_filter: None, + dynamic_predicate_caches: Default::default(), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema: table_schema.clone(), @@ -1241,6 +1768,8 @@ mod tests { vortex_reader_factory: Arc::new(DefaultVortexReaderFactory::new(object_store)), projection: ProjectionExprs::from_indices(&[0, 1, 2], &table_schema), filter: None, + dynamic_filter: None, + dynamic_predicate_caches: Default::default(), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema: TableSchema::from(Arc::clone(&table_schema)), @@ -1396,6 +1925,8 @@ mod tests { table_schema.file_schema(), ), filter: None, + dynamic_filter: None, + dynamic_predicate_caches: Default::default(), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema: table_schema.clone(), @@ -1457,6 +1988,8 @@ mod tests { vortex_reader_factory: Arc::new(DefaultVortexReaderFactory::new(object_store)), projection, filter: None, + dynamic_filter: None, + dynamic_predicate_caches: Default::default(), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema: TableSchema::from(schema), @@ -1665,6 +2198,8 @@ mod tests { ))), projection, filter: None, + dynamic_filter: None, + dynamic_predicate_caches: Default::default(), file_pruning_predicate: None, expr_adapter_factory: Arc::new(DefaultPhysicalExprAdapterFactory), table_schema, diff --git a/vortex-datafusion/src/persistent/source.rs b/vortex-datafusion/src/persistent/source.rs index c47017cdab5..b93c98945ec 100644 --- a/vortex-datafusion/src/persistent/source.rs +++ b/vortex-datafusion/src/persistent/source.rs @@ -14,11 +14,15 @@ use datafusion_datasource::file::FileSource; use datafusion_datasource::file_scan_config::FileScanConfig; use datafusion_datasource::file_stream::FileOpener; use datafusion_execution::cache::cache_manager::FileMetadataCache; +use datafusion_physical_expr::DynamicFilterTracking; use datafusion_physical_expr::EquivalenceProperties; use datafusion_physical_expr::PhysicalExprRef; use datafusion_physical_expr::PhysicalSortExpr; use datafusion_physical_expr::conjunction; +use datafusion_physical_expr::conjunction_opt; +use datafusion_physical_expr::expressions::Column; use datafusion_physical_expr::projection::ProjectionExprs; +use datafusion_physical_expr::utils::collect_columns; use datafusion_physical_expr_adapter::DefaultPhysicalExprAdapterFactory; use datafusion_physical_expr_common::physical_expr::fmt_sql; use datafusion_physical_plan::DisplayFormatType; @@ -37,6 +41,7 @@ use vortex::metrics::MetricsRegistry; use vortex::session::VortexSession; use vortex_utils::aliases::dash_map::DashMap; +use super::opener::DynamicPredicateCaches; use super::opener::NaturalSplits; use super::opener::VortexOpener; use crate::VortexTableOptions; @@ -126,12 +131,15 @@ use crate::persistent::reader::VortexReaderFactory; /// /// # Projection And Predicate Behavior /// -/// `VortexSource` keeps two related predicate forms: +/// `VortexSource` keeps predicates for three stages: /// /// - `full_predicate`, which is used by DataFusion's `FilePruner` to skip whole /// files before they are opened, /// - `vortex_predicate`, which contains only the expressions Vortex can evaluate /// during the scan. +/// - `dynamic_predicate`, which applies optional runtime pruning hints before converting chunks +/// to Arrow. DataFusion retains the complete runtime predicate. The referenced columns must +/// be projected directly by the scan. /// /// Projection handling depends on /// [`VortexTableOptions::projection_pushdown`]: @@ -146,7 +154,8 @@ use crate::persistent::reader::VortexReaderFactory; /// - when disabled, `VortexSource` still keeps the full predicate for /// DataFusion file pruning, but reports filters as not pushed down so /// DataFusion evaluates them after the scan, -/// - when enabled, supported filters are pushed into the Vortex scan. +/// - when enabled, supported static filters are pushed into the Vortex scan and supported +/// runtime predicates can also be used as pruning hints. /// /// # Observability /// @@ -191,6 +200,10 @@ pub struct VortexSource { /// Subset of predicates that can be pushed down into Vortex scan operations. /// These are expressions that Vortex can efficiently evaluate during scanning. pub(crate) vortex_predicate: Option, + /// Runtime pruning hints evaluated before returning batches to DataFusion. + dynamic_predicate: Option, + /// Snapshot caches belong to this projection and predicate, shared across file partitions. + dynamic_predicate_caches: Arc, /// DataFusion-native metrics exposed through `DataSourceExec`. df_metrics: ExecutionPlanMetricsSet, /// Shared layout readers, the source only lives as long as one scan. @@ -231,6 +244,8 @@ impl VortexSource { projection, full_predicate: None, vortex_predicate: None, + dynamic_predicate: None, + dynamic_predicate_caches: Arc::new(DashMap::default()), df_metrics: Default::default(), layout_readers: Arc::new(DashMap::default()), natural_splits: Arc::new(DashMap::default()), @@ -351,6 +366,8 @@ impl VortexSource { vortex_reader_factory, projection: self.projection.clone(), filter: self.vortex_predicate.clone(), + dynamic_filter: self.dynamic_predicate.clone(), + dynamic_predicate_caches: Arc::clone(&self.dynamic_predicate_caches), file_pruning_predicate: self.full_predicate.clone(), expr_adapter_factory, table_schema: self.table_schema.clone(), @@ -429,12 +446,18 @@ impl FileSource for VortexSource { if let Some(predicate) = &self.vortex_predicate { write!(f, ", predicate: {predicate}")?; } + if let Some(predicate) = &self.dynamic_predicate { + write!(f, ", dynamic_filter: {predicate}")?; + } } // Use TreeRender style key=value formatting to display the predicate DisplayFormatType::TreeRender => { if let Some(predicate) = &self.vortex_predicate { writeln!(f, "predicate={}", fmt_sql(predicate.as_ref()))?; }; + if let Some(predicate) = &self.dynamic_predicate { + writeln!(f, "dynamic_filter={}", fmt_sql(predicate.as_ref()))?; + } } } Ok(()) @@ -474,10 +497,19 @@ impl FileSource for VortexSource { .with_updated_node(Arc::new(source) as _)); } + let mut dynamic_filters = Vec::new(); + source.dynamic_predicate_caches = Arc::new(DashMap::default()); let supported_filters = filters .into_iter() .map(|expr| { - if self + if DynamicFilterTracking::classify(&expr).contains_dynamic_filter() { + if dynamic_filter_matches_projection(&expr, &self.projection) { + dynamic_filters.push(Arc::clone(&expr)); + } + // Runtime predicates are pruning hints. Their unsupported parts must + // remain the parent's responsibility when the filter changes shape. + PushedDownPredicate::unsupported(expr) + } else if self .expression_convertor .can_be_pushed_down(&expr, self.table_schema.file_schema()) { @@ -487,6 +519,8 @@ impl FileSource for VortexSource { } }) .collect::>(); + source.dynamic_predicate = + conjunction_opt(source.dynamic_predicate.into_iter().chain(dynamic_filters)); if supported_filters .iter() @@ -505,15 +539,8 @@ impl FileSource for VortexSource { PushedDown::No => None, }) .cloned(); - - let predicate = match source.vortex_predicate { - Some(predicate) => conjunction(std::iter::once(predicate).chain(supported)), - None => conjunction(supported), - }; - - tracing::debug!(%predicate, "Saving predicate"); - - source.vortex_predicate = Some(predicate); + source.vortex_predicate = + conjunction_opt(source.vortex_predicate.into_iter().chain(supported)); Ok(FilterPushdownPropagation::with_parent_pushdown_result( supported_filters.iter().map(|f| f.discriminant).collect(), @@ -527,6 +554,13 @@ impl FileSource for VortexSource { ) -> DFResult>> { let mut source = self.clone(); source.projection = self.projection.try_merge(projection)?; + source.dynamic_predicate_caches = Arc::new(DashMap::default()); + if let Some(filter) = &source.dynamic_predicate + && !dynamic_filter_matches_projection(filter, &source.projection) + { + // Optional runtime hints must not prevent projection pushdown. + source.dynamic_predicate = None; + } Ok(Some(Arc::new(source))) } @@ -546,12 +580,32 @@ impl FileSource for VortexSource { self.full_predicate .iter() .chain(self.vortex_predicate.iter()) + .chain(self.dynamic_predicate.iter()) .chain(self.projection.iter().map(|expr| &expr.expr)), f, ) } } +/// Runtime filters keep their original column names when their bounds change. Only accept them +/// when the scan returns those columns directly; computed or renamed projections stay in DF. +fn dynamic_filter_matches_projection( + filter: &PhysicalExprRef, + projection: &ProjectionExprs, +) -> bool { + projection.iter().all(|expr| { + expr.expr + .downcast_ref::() + .is_some_and(|column| column.name() == expr.alias) + }) && collect_columns(filter).iter().all(|column| { + projection.iter().any(|expr| { + expr.expr + .downcast_ref::() + .is_some_and(|projected| projected == column) + }) + }) +} + #[cfg(test)] mod tests { use arrow_schema::DataType; @@ -567,7 +621,9 @@ mod tests { use datafusion_physical_expr::ScalarFunctionExpr; use datafusion_physical_expr::expressions as df_expr; use datafusion_physical_expr::expressions::Column; + use datafusion_physical_expr::expressions::DynamicFilterPhysicalExpr; use object_store::memory::InMemory; + use rstest::rstest; use vortex::VortexSessionDefault; use super::*; @@ -714,6 +770,54 @@ mod tests { Ok(()) } + #[rstest] + #[case(vec![0, 1], true)] + #[case(vec![1, 0], true)] + #[case(vec![1], false)] + fn dynamic_filter_requires_projected_column( + #[case] indices: Vec, + #[case] supported: bool, + #[values(false, true)] predicate_pushdown: bool, + ) -> anyhow::Result<()> { + let schema = sort_test_schema(); + let mut source = + sort_test_source(Arc::clone(&schema)).with_predicate_pushdown(predicate_pushdown); + source.projection = ProjectionExprs::from_indices(&indices, &schema); + let column = Arc::new(Column::new("a", 0)) as PhysicalExprRef; + let filter = Arc::new(DynamicFilterPhysicalExpr::new( + vec![column], + df_expr::lit(true), + )) as PhysicalExprRef; + + let result = source.try_pushdown_filters(vec![filter], &ConfigOptions::new())?; + assert!(matches!(result.filters.as_slice(), [PushedDown::No])); + let updated = result + .updated_node + .ok_or_else(|| anyhow::anyhow!("missing updated source"))?; + let updated = updated + .downcast_ref::() + .ok_or_else(|| anyhow::anyhow!("expected VortexSource"))?; + assert_eq!( + updated.dynamic_predicate.is_some(), + predicate_pushdown && supported + ); + assert!(updated.vortex_predicate.is_none()); + if predicate_pushdown && supported { + let projection = ProjectionExprs::from_indices( + &[0], + &Schema::new(vec![Field::new("renamed", DataType::Int32, false)]), + ); + let projected = updated + .try_pushdown_projection(&projection)? + .ok_or_else(|| anyhow::anyhow!("expected projection pushdown"))?; + let projected = projected + .downcast_ref::() + .ok_or_else(|| anyhow::anyhow!("expected VortexSource"))?; + assert!(projected.dynamic_predicate.is_none()); + } + Ok(()) + } + #[test] fn try_pushdown_filters_respects_disabled_predicate_pushdown() -> anyhow::Result<()> { let schema = Arc::new(Schema::new(vec![Field::new("name", DataType::Utf8, false)])); diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no index f21d55b4c0b..706c2ce0549 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q1.slt.no @@ -77,9 +77,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +17)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_customer_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -90,4 +90,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no index 09a7a2f7fe1..1b4c5a6309e 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q10.slt.no @@ -130,15 +130,15 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no index 54a14ec8406..f306252110a 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q11.slt.no @@ -160,7 +160,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -172,8 +172,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -181,8 +181,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -190,5 +190,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no index 97b54c2c80d..1d854aab450 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q14.slt.no @@ -415,7 +415,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -423,7 +423,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -431,13 +431,13 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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))] @@ -454,7 +454,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -462,7 +462,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -470,13 +470,13 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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))] @@ -493,7 +493,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -501,7 +501,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -509,13 +509,13 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -524,12 +524,12 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no index 1092d305b47..897db64fb22 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q15.slt.no @@ -55,7 +55,7 @@ physical_plan 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 +09)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +11)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no index 9d9f479d707..ab7f8c4a5be 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q16.slt.no @@ -78,7 +78,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 +22)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_returns.vortex]]}, projection=[cr_order_number], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no index e377fd10cf3..c915d237cd0 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q17.slt.no @@ -106,10 +106,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no index 256b2027ee5..5d93b55cbee 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q18.slt.no @@ -102,10 +102,10 @@ physical_plan 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]) +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]), dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +22)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +23)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no index e580bb2f0e3..6d1d8ed1fa6 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q19.slt.no @@ -76,7 +76,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +20)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +21)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_zip], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no index 39919c75690..5272b5f15e8 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q2.slt.no @@ -139,7 +139,7 @@ physical_plan 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 +14)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 @@ -151,7 +151,7 @@ physical_plan 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 +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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/q21.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no index 988e1ba5dd5..392af7faf47 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q21.slt.no @@ -70,4 +70,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no index 1d4cf91c79c..3ecbd78f4ab 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q22.slt.no @@ -47,4 +47,4 @@ physical_plan 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 +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/inventory.vortex]]}, projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no index 8cec1a94048..a28a47f32a8 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q23.slt.no @@ -230,17 +230,17 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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))] @@ -251,7 +251,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -276,17 +276,17 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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))] @@ -297,4 +297,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no index c2738d9a57d..b9113bb6379 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q24.slt.no @@ -132,12 +132,12 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] +30)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip, ca_country], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 @@ -157,8 +157,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] +54)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state, ca_zip, ca_country], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no index c9632f922ff..22171d81560 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q25.slt.no @@ -99,11 +99,11 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +27)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id, i_item_desc], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no index 9f152c4410b..49de1c36cac 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q26.slt.no @@ -60,9 +60,9 @@ physical_plan 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 +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no index 182b9886de8..223fcaa9347 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q27.slt.no @@ -143,28 +143,28 @@ physical_plan 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 +10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +24)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -178,4 +178,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no index 99149ded3d4..1d27c565c60 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q29.slt.no @@ -99,10 +99,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no index 879881fc0ed..bf27df0baff 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q30.slt.no @@ -111,10 +111,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +18)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -127,5 +127,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +34)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no index 0052185be85..763472f8457 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q31.slt.no @@ -177,8 +177,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +21)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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)] @@ -188,28 +188,28 @@ physical_plan 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 +31)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +40)----------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +49)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -219,8 +219,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +63)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -230,5 +230,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +74)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no index e3aefd7def5..c5931dbd73e 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q32.slt.no @@ -58,11 +58,11 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no index 411a8c4d6be..d56082fed60 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q33.slt.no @@ -155,12 +155,12 @@ physical_plan 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 +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -168,12 +168,12 @@ physical_plan 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 +26)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -187,5 +187,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +46)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_manufact_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no index aa6fa04b01e..bcb6246e478 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q35.slt.no @@ -123,15 +123,15 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no index 7b397768e64..e2df2a27657 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q36.slt.no @@ -151,7 +151,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -166,7 +166,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -181,4 +181,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no index f8fc0d01f73..7fb0b736ff5 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q37.slt.no @@ -56,7 +56,7 @@ physical_plan 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]) +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]), dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no index 67467cf5ecd..11d72217233 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q38.slt.no @@ -89,7 +89,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -97,7 +97,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -105,4 +105,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no index 7e01dffa4e6..d67fe1ad788 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q39.slt.no @@ -126,7 +126,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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)] @@ -141,4 +141,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no index eaced5a2cd9..3696fac06c4 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q4.slt.no @@ -229,7 +229,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -244,7 +244,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -256,8 +256,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -265,8 +265,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -274,8 +274,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -283,5 +283,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no index 6e4870594ee..8cb5e7e0805 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q41.slt.no @@ -96,10 +96,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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) +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), dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no index 9c948da0617..9eec08a215f 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q43.slt.no @@ -76,7 +76,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no index aadaebf13b2..704d088694c 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q44.slt.no @@ -138,8 +138,8 @@ physical_plan 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 +35)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +36)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_product_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no index 3e0fcda39e2..d7509ea6315 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q45.slt.no @@ -85,7 +85,7 @@ physical_plan 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 +14)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_city, ca_zip], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no index 60e23576da0..e2341ae0e3f 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q46.slt.no @@ -87,7 +87,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -100,4 +100,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no index 9fc889c7418..1f840793a80 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q47.slt.no @@ -159,7 +159,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -173,7 +173,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -187,4 +187,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no index 48f1c4ec0cd..0cb1b270625 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q49.slt.no @@ -207,7 +207,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -226,7 +226,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -246,4 +246,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no index 54761234352..76f4bc3d21a 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q5.slt.no @@ -211,7 +211,7 @@ physical_plan 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 +33)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_page.vortex]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 @@ -224,5 +224,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no index 824ae1819ac..bb821cfe56f 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q50.slt.no @@ -105,8 +105,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no index 020c5a758e8..155180668f9 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q51.slt.no @@ -109,7 +109,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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] @@ -119,4 +119,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no index d1adcfcd063..b1dfeabcef5 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q54.slt.no @@ -131,7 +131,7 @@ physical_plan 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 +17)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_county, ca_state], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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=[] @@ -147,11 +147,11 @@ physical_plan 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 +33)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 +37)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_month_seq], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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=[] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no index 9ca42a709be..4c595ee922a 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q56.slt.no @@ -162,12 +162,12 @@ physical_plan 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 +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -181,8 +181,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +33)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -196,5 +196,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +48)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no index d09ad90ac2d..3fc8b59f2d9 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q57.slt.no @@ -152,7 +152,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -166,7 +166,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -180,4 +180,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no index 7e17f54dafc..3424c7432a4 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q58.slt.no @@ -162,9 +162,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +23)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -177,10 +177,10 @@ physical_plan 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 +36)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -191,8 +191,8 @@ physical_plan 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 +50)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +52)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 index 4f2cf06f67c..f9dd245e96d 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q59.slt.no @@ -143,8 +143,8 @@ physical_plan 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 +16)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -155,5 +155,5 @@ physical_plan 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 +28)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_week_seq, d_day_name], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no index f382d5f0b0c..3f20ad3b945 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q6.slt.no @@ -83,7 +83,7 @@ physical_plan 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 +17)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_current_price, i_category], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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] @@ -94,8 +94,8 @@ physical_plan 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 +28)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no index d13cf51cb05..c67618c93ae 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q60.slt.no @@ -156,12 +156,12 @@ physical_plan 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 +13)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -175,8 +175,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +33)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -190,5 +190,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +48)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no index 9222018d05b..3be420ca8b9 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q61.slt.no @@ -133,9 +133,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +22)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -150,6 +150,6 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +39)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_customer_sk, c_current_addr_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no index 021307f1aec..2ff3e4ba883 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q64.slt.no @@ -307,7 +307,7 @@ physical_plan 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 +23)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -319,7 +319,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -332,19 +332,19 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +54)--------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +56)----------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +58)------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +60)--------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 @@ -362,7 +362,7 @@ physical_plan 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 +78)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -374,7 +374,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -387,16 +387,16 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +109)------------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +111)--------------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +113)----------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +115)------------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no index f18a93236e2..4aac4e538b0 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q65.slt.no @@ -87,7 +87,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -98,4 +98,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no index 16ee29ad3c1..f2bde783a47 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q66.slt.no @@ -288,9 +288,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -304,6 +304,6 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no index 3214f282971..000b89285b0 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q68.slt.no @@ -85,7 +85,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -98,4 +98,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no index dc5871a7c54..bfa44f4a42d 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q69.slt.no @@ -113,15 +113,15 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no index 8022e2be4a5..109d535e9f2 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q7.slt.no @@ -60,9 +60,9 @@ physical_plan 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 +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no index 6000b9b4432..0a8c57f1383 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q70.slt.no @@ -90,7 +90,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -102,4 +102,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no index 486b9272d07..165a8c33e07 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q71.slt.no @@ -99,14 +99,14 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no index 7516f48e8f1..26b5fa191d3 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q72.slt.no @@ -115,6 +115,6 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no index 27f984affb4..f008f22b97d 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q74.slt.no @@ -144,7 +144,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -156,8 +156,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -165,8 +165,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -174,5 +174,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no index 9f966a8eecb..d313abf80e2 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q75.slt.no @@ -203,9 +203,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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] @@ -214,8 +214,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -225,8 +225,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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]) @@ -243,10 +243,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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] @@ -254,9 +254,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -265,6 +265,6 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no index 89632d78322..7e28e56a57e 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q76.slt.no @@ -105,22 +105,22 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +15)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +23)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +31)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_year, d_qoy], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no index 1f1c8dde519..6097537c6e1 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q77.slt.no @@ -199,7 +199,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -208,7 +208,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -219,14 +219,14 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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] @@ -240,7 +240,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -249,4 +249,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no index be368b84eb9..3a5d71a03fa 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q78.slt.no @@ -145,7 +145,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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] @@ -157,7 +157,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 @@ -168,4 +168,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no index 9f0a9b40781..c3c5d7d04de 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q8.slt.no @@ -490,10 +490,10 @@ physical_plan 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 +26)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_zip], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +29)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/store.vortex]]}, projection=[s_store_sk, s_store_name, s_zip], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no index e2273b410ae..95e77675bea 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q80.slt.no @@ -199,7 +199,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -215,9 +215,9 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +43)--------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/catalog_page.vortex]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 @@ -233,4 +233,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no index e5acd1d66bc..d69a603d6f0 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q81.slt.no @@ -118,10 +118,10 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +20)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -136,5 +136,5 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] +38)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_address.vortex]]}, projection=[ca_address_sk, ca_state], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no index 56e3af18835..79f532fc348 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q82.slt.no @@ -56,7 +56,7 @@ physical_plan 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]) +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]), dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no index 75cdabbe3bf..6675836c731 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q83.slt.no @@ -157,13 +157,13 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +18)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +22)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -177,13 +177,13 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +38)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +42)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 @@ -193,11 +193,11 @@ physical_plan 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 +52)------------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/item.vortex]]}, projection=[i_item_sk, i_item_id], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] 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 +55)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date_sk, d_date], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +59)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/date_dim.vortex]]}, projection=[d_date, d_week_seq], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no index 7ffc1e4be40..bdb8cb90637 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q84.slt.no @@ -60,8 +60,8 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +18)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +19)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/household_demographics.vortex]]}, projection=[hd_demo_sk, hd_income_band_sk], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no index 09892312095..3162a4e1d70 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q85.slt.no @@ -115,7 +115,7 @@ physical_plan 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) +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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), dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +23)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer_demographics.vortex]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no index 939be33ba5c..3a924ca2755 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q87.slt.no @@ -87,7 +87,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -97,7 +97,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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=[] @@ -105,4 +105,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no index fcd749f1581..3cb7a2067b4 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q88.slt.no @@ -315,7 +315,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -328,7 +328,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -341,7 +341,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -354,7 +354,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -367,7 +367,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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] @@ -380,7 +380,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 79)------------------------CrossJoinExec 80)--------------------------ProjectionExec: expr=[count(Int64(1))@0 as h8_30_to_9] 81)----------------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] @@ -392,7 +392,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 91)--------------------------ProjectionExec: expr=[count(Int64(1))@0 as h9_to_9_30] 92)----------------------------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] 93)------------------------------CoalescePartitionsExec @@ -403,4 +403,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no index 7e098e17175..cf429ab43d9 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q90.slt.no @@ -86,7 +86,7 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 15)------ProjectionExec: expr=[count(Int64(1))@0 as pmc] 16)--------AggregateExec: mode=Final, gby=[], aggr=[count(Int64(1))] 17)----------CoalescePartitionsExec @@ -97,4 +97,4 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no index 43a4870fdf2..ccc7b9141ff 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q91.slt.no @@ -84,12 +84,12 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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% +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%, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no index 563c1659b27..a34c5b4028e 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q92.slt.no @@ -59,11 +59,11 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no index 05864072ca4..f0d067a2237 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q94.slt.no @@ -79,6 +79,6 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] +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, dynamic_filter: DynamicFilter [ empty ] +22)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_order_number], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no index ac5eed7e74c..0fa73cb24a5 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q95.slt.no @@ -96,16 +96,16 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 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 +26)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/web_returns.vortex]]}, projection=[wr_order_number], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no index de71ee1f0f8..5549e5324af 100644 --- a/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no +++ b/vortex-sqllogictest/slt/tpcds/datafusion/plans/q97.slt.no @@ -77,11 +77,11 @@ physical_plan 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 +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, dynamic_filter: DynamicFilter [ empty ] 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 +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, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q10.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q10.slt.no index 09795434ee7..27fcd5d98b8 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q10.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q10.slt.no @@ -69,5 +69,5 @@ physical_plan 12)--------------------CoalescePartitionsExec 13)----------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey], file_type=vortex, predicate: o_orderdate@4 >= 1993-10-01 AND o_orderdate@4 < 1994-01-01 14)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 -15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment], file_type=vortex -16)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_returnflag@8 = R +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +16)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_returnflag@8 = R, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q11.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q11.slt.no index f56ab471267..4ef95928b8f 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q11.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q11.slt.no @@ -69,8 +69,8 @@ physical_plan 09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@3)], projection=[ps_partkey@1, ps_availqty@2, ps_supplycost@3] 10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey], file_type=vortex, predicate: n_name@1 = GERMANY 11)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, ps_suppkey@1)], projection=[ps_partkey@2, ps_availqty@4, ps_supplycost@5, s_nationkey@1] -12)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex -13)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost], file_type=vortex +12)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +13)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 14)--ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)] 15)----AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] 16)------CoalescePartitionsExec @@ -78,5 +78,5 @@ physical_plan 18)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)], projection=[ps_availqty@1, ps_supplycost@2] 19)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey], file_type=vortex, predicate: n_name@1 = GERMANY 20)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, ps_suppkey@0)], projection=[ps_availqty@3, ps_supplycost@4, s_nationkey@1] -21)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex -22)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_suppkey, ps_availqty, ps_supplycost], file_type=vortex +21)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +22)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_suppkey, ps_availqty, ps_supplycost], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q15.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q15.slt.no index fadc30806a0..3fab149aeae 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q15.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q15.slt.no @@ -52,7 +52,7 @@ physical_plan 08)------------AggregateExec: mode=FinalPartitioned, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * 1 - lineitem.l_discount) as sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] 09)--------------RepartitionExec: partitioning=Hash([l_suppkey@0], 4), input_partitions=4 10)----------------AggregateExec: mode=Partial, gby=[l_suppkey@0 as l_suppkey], aggr=[sum(lineitem.l_extendedprice * 1 - lineitem.l_discount) as sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] -11)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_suppkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_shipdate@10 >= 1996-01-01 AND l_shipdate@10 < 1996-04-01 +11)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_suppkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_shipdate@10 >= 1996-01-01 AND l_shipdate@10 < 1996-04-01, dynamic_filter: DynamicFilter [ empty ] 12)--AggregateExec: mode=Final, gby=[], aggr=[max(revenue.total_revenue)] 13)----CoalescePartitionsExec 14)------AggregateExec: mode=Partial, gby=[], aggr=[max(revenue.total_revenue)] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q16.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q16.slt.no index cbebae7c8dd..52658299f56 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q16.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q16.slt.no @@ -63,6 +63,6 @@ physical_plan 11)--------------------CoalescePartitionsExec 12)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, ps_partkey@0)], projection=[ps_suppkey@5, p_brand@1, p_type@2, p_size@3] 13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey, p_brand, p_type, p_size], file_type=vortex, predicate: p_brand@3 != Brand#45 AND p_size@5 IN (SET) ([49, 14, 23, 45, 19, 3, 36, 9]) AND p_type@4 NOT LIKE MEDIUM POLISHED% -14)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey], file_type=vortex +14)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 15)--------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 16)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey], file_type=vortex, predicate: s_comment@6 LIKE %Customer%Complaints% diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q17.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q17.slt.no index db86fdd57b4..4f94ffa0743 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q17.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q17.slt.no @@ -45,9 +45,9 @@ physical_plan 06)----------RepartitionExec: partitioning=Hash([p_partkey@2], 4), input_partitions=4 07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, l_partkey@0)], projection=[l_quantity@2, l_extendedprice@3, p_partkey@0] 08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey], file_type=vortex, predicate: p_brand@3 = Brand#23 AND p_container@6 = MED BOX -09)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_quantity, l_extendedprice], file_type=vortex +09)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_quantity, l_extendedprice], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 10)----------ProjectionExec: expr=[CAST(0.2 * CAST(avg(lineitem.l_quantity)@1 AS Float64) AS Decimal128(30, 15)) as Float64(0.2) * avg(lineitem.l_quantity), l_partkey@0 as l_partkey] 11)------------AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] 12)--------------RepartitionExec: partitioning=Hash([l_partkey@0], 4), input_partitions=4 13)----------------AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] -14)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_quantity], file_type=vortex +14)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_quantity], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q18.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q18.slt.no index 04df318a2b6..3eecde0c62e 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q18.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q18.slt.no @@ -68,6 +68,6 @@ physical_plan 12)----------RepartitionExec: partitioning=Hash([o_orderkey@2], 4), input_partitions=4 13)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, c_name@1, o_orderkey@2, o_totalprice@4, o_orderdate@5] 14)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_name], file_type=vortex -15)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate], file_type=vortex +15)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] 16)----------RepartitionExec: partitioning=Hash([l_orderkey@0], 4), input_partitions=4 -17)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_quantity], file_type=vortex +17)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_quantity], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q2.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q2.slt.no index 2085f0dd0c7..5803d6e992b 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q2.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q2.slt.no @@ -92,12 +92,12 @@ physical_plan 05)--------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_regionkey@0, n_regionkey@9)], projection=[p_partkey@1, p_mfgr@2, s_name@3, s_address@4, s_phone@5, s_acctbal@6, s_comment@7, ps_supplycost@8, n_name@9] 06)----------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/region.vortex]]}, projection=[r_regionkey], file_type=vortex, predicate: r_name@1 = EUROPE 07)----------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@4)], projection=[p_partkey@3, p_mfgr@4, s_name@5, s_address@6, s_phone@8, s_acctbal@9, s_comment@10, ps_supplycost@11, n_name@1, n_regionkey@2] -08)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name, n_regionkey], file_type=vortex +08)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name, n_regionkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 09)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, ps_suppkey@2)], projection=[p_partkey@7, p_mfgr@8, s_name@1, s_address@2, s_nationkey@3, s_phone@4, s_acctbal@5, s_comment@6, ps_supplycost@10] -10)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment], file_type=vortex +10)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 11)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, ps_partkey@0)], projection=[p_partkey@0, p_mfgr@1, ps_suppkey@3, ps_supplycost@4] 12)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey, p_mfgr], file_type=vortex, predicate: p_size@5 = 15 AND p_type@4 LIKE %BRASS -13)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], file_type=vortex +13)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 14)------ProjectionExec: expr=[min(partsupp.ps_supplycost)@1 as min(partsupp.ps_supplycost), ps_partkey@0 as ps_partkey] 15)--------AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)] 16)----------RepartitionExec: partitioning=Hash([ps_partkey@0], 4), input_partitions=4 @@ -105,7 +105,7 @@ physical_plan 18)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_regionkey@0, n_regionkey@2)], projection=[ps_partkey@1, ps_supplycost@2] 19)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/region.vortex]]}, projection=[r_regionkey], file_type=vortex, predicate: r_name@1 = EUROPE 20)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)], projection=[ps_partkey@2, ps_supplycost@3, n_regionkey@1] -21)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_regionkey], file_type=vortex +21)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_regionkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 22)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, ps_suppkey@1)], projection=[ps_partkey@2, ps_supplycost@4, s_nationkey@1] -23)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex -24)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], file_type=vortex +23)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +24)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q20.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q20.slt.no index 4b4dc5bc002..bf648918e6a 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q20.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q20.slt.no @@ -72,14 +72,14 @@ physical_plan 03)----HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(s_suppkey@0, ps_suppkey@0)], projection=[s_name@1, s_address@2] 04)------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@3)], projection=[s_suppkey@1, s_name@2, s_address@3] 05)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey], file_type=vortex, predicate: n_name@1 = CANADA -06)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_address, s_nationkey], file_type=vortex +06)--------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_address, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 07)------HashJoinExec: mode=CollectLeft, join_type=LeftSemi, on=[(ps_partkey@0, l_partkey@1), (ps_suppkey@1, l_suppkey@2)], filter=CAST(ps_availqty@0 AS Float64) > Float64(0.5) * sum(lineitem.l_quantity)@1, projection=[ps_suppkey@1] 08)--------CoalescePartitionsExec 09)----------HashJoinExec: mode=CollectLeft, join_type=RightSemi, on=[(p_partkey@0, ps_partkey@0)] 10)------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey], file_type=vortex, predicate: p_name@1 LIKE forest% -11)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_availqty], file_type=vortex +11)------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_availqty], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] 12)--------ProjectionExec: expr=[0.5 * CAST(sum(lineitem.l_quantity)@2 AS Float64) as Float64(0.5) * sum(lineitem.l_quantity), l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey] 13)----------AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] 14)------------RepartitionExec: partitioning=Hash([l_partkey@0, l_suppkey@1], 4), input_partitions=4 15)--------------AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] -16)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_suppkey, l_quantity], file_type=vortex, predicate: l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01 +16)----------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_partkey, l_suppkey, l_quantity], file_type=vortex, predicate: l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q21.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q21.slt.no index b441a37c012..711b282f09d 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q21.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q21.slt.no @@ -93,7 +93,7 @@ physical_plan 14)------------------------CoalescePartitionsExec 15)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey], file_type=vortex, predicate: o_orderstatus@2 = F 16)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_name@1, s_nationkey@2, l_orderkey@3, l_suppkey@4] -17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_nationkey], file_type=vortex -18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex, predicate: l_receiptdate@12 > l_commitdate@11 -19)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex -20)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex, predicate: l_receiptdate@12 > l_commitdate@11 +17)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_name, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex, predicate: l_receiptdate@12 > l_commitdate@11, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] +19)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +20)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey], file_type=vortex, predicate: l_receiptdate@12 > l_commitdate@11, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q22.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q22.slt.no index c7280c1b401..44d949ed2bb 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q22.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q22.slt.no @@ -71,7 +71,7 @@ physical_plan 11)--------------------FilterExec: substr(c_phone@1, 1, 2) IN (SET) ([13, 31, 23, 29, 30, 18, 17]) AND CAST(c_acctbal@2 AS Decimal128(19, 6)) > scalar_subquery() 12)----------------------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 13)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_phone, c_acctbal], file_type=vortex -14)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_custkey], file_type=vortex +14)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_custkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 15)--AggregateExec: mode=Final, gby=[], aggr=[avg(customer.c_acctbal)] 16)----CoalescePartitionsExec 17)------AggregateExec: mode=Partial, gby=[], aggr=[avg(customer.c_acctbal)] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q3.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q3.slt.no index 4b4d7fe8b4a..985767262a8 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q3.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q3.slt.no @@ -54,5 +54,5 @@ physical_plan 08)--------------CoalescePartitionsExec 09)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[o_orderkey@1, o_orderdate@3, o_shippriority@4] 10)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey], file_type=vortex, predicate: c_mktsegment@6 = BUILDING -11)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], file_type=vortex, predicate: o_orderdate@4 < 1995-03-15 -12)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_shipdate@10 > 1995-03-15 +11)------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], file_type=vortex, predicate: o_orderdate@4 < 1995-03-15, dynamic_filter: DynamicFilter [ empty ] +12)--------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_extendedprice, l_discount], file_type=vortex, predicate: l_shipdate@10 > 1995-03-15, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q5.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q5.slt.no index b598cbc98f6..ff1546d62c7 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q5.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q5.slt.no @@ -62,12 +62,12 @@ physical_plan 07)------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_regionkey@0, n_regionkey@3)], projection=[l_extendedprice@1, l_discount@2, n_name@3] 08)--------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/region.vortex]]}, projection=[r_regionkey], file_type=vortex, predicate: r_name@1 = ASIA 09)--------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)], projection=[l_extendedprice@3, l_discount@4, n_name@1, n_regionkey@2] -10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name, n_regionkey], file_type=vortex +10)----------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name, n_regionkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 11)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1), (s_nationkey@1, c_nationkey@0)], projection=[l_extendedprice@4, l_discount@5, s_nationkey@1] -12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex +12)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 13)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(o_orderkey@1, l_orderkey@0)], projection=[c_nationkey@0, l_suppkey@3, l_extendedprice@4, l_discount@5] 14)--------------------CoalescePartitionsExec 15)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_nationkey@1, o_orderkey@2] 16)------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_nationkey], file_type=vortex -17)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey], file_type=vortex, predicate: o_orderdate@4 >= 1994-01-01 AND o_orderdate@4 < 1995-01-01 -18)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount], file_type=vortex +17)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey], file_type=vortex, predicate: o_orderdate@4 >= 1994-01-01 AND o_orderdate@4 < 1995-01-01, dynamic_filter: DynamicFilter [ empty ] +18)--------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q7.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q7.slt.no index 8510a871d15..019fcde3c76 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q7.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q7.slt.no @@ -82,11 +82,11 @@ physical_plan 10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@0)], projection=[l_extendedprice@3, l_discount@4, l_shipdate@5, c_nationkey@6, n_name@1] 11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name], file_type=vortex, predicate: n_name@1 = FRANCE OR n_name@1 = GERMANY 12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_custkey@0, o_custkey@4)], projection=[s_nationkey@2, l_extendedprice@3, l_discount@4, l_shipdate@5, c_nationkey@1] -13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_nationkey], file_type=vortex +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 14)--------------------HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@0, l_orderkey@1)], projection=[s_nationkey@2, l_extendedprice@4, l_discount@5, l_shipdate@6, o_custkey@1] 15)----------------------RepartitionExec: partitioning=Hash([o_orderkey@0], 4), input_partitions=4 -16)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey], file_type=vortex +16)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 17)----------------------RepartitionExec: partitioning=Hash([l_orderkey@1], 4), input_partitions=4 18)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_nationkey@1, l_orderkey@2, l_extendedprice@4, l_discount@5, l_shipdate@6] -19)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex -20)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=vortex, predicate: l_shipdate@10 >= 1995-01-01 AND l_shipdate@10 <= 1996-12-31 +19)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] +20)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], file_type=vortex, predicate: l_shipdate@10 >= 1995-01-01 AND l_shipdate@10 <= 1996-12-31, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q8.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q8.slt.no index b5e5225f462..78c8852955b 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q8.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q8.slt.no @@ -88,14 +88,14 @@ physical_plan 10)----------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)], projection=[l_extendedprice@2, l_discount@3, o_orderdate@5, n_regionkey@6, n_name@1] 11)------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_name], file_type=vortex 12)------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, c_nationkey@4)], projection=[l_extendedprice@2, l_discount@3, s_nationkey@4, o_orderdate@5, n_regionkey@1] -13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_regionkey], file_type=vortex +13)--------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/nation.vortex]]}, projection=[n_nationkey, n_regionkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 14)--------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(c_custkey@0, o_custkey@3)], projection=[l_extendedprice@2, l_discount@3, s_nationkey@4, o_orderdate@6, c_nationkey@1] -15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_nationkey], file_type=vortex +15)----------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/customer.vortex]]}, projection=[c_custkey, c_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 16)----------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(o_orderkey@0, l_orderkey@0)], projection=[l_extendedprice@4, l_discount@5, s_nationkey@6, o_custkey@1, o_orderdate@2] 17)------------------------CoalescePartitionsExec -18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_orderdate], file_type=vortex, predicate: o_orderdate@4 >= 1995-01-01 AND o_orderdate@4 <= 1996-12-31 +18)--------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:], [${WORK_DIR}/orders.vortex:]]}, projection=[o_orderkey, o_custkey, o_orderdate], file_type=vortex, predicate: o_orderdate@4 >= 1995-01-01 AND o_orderdate@4 <= 1996-12-31, dynamic_filter: DynamicFilter [ empty ] 19)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[l_orderkey@2, l_extendedprice@4, l_discount@5, s_nationkey@1] -20)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex +20)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 21)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_suppkey@3, l_extendedprice@4, l_discount@5] 22)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey], file_type=vortex, predicate: p_type@4 = ECONOMY ANODIZED STEEL -23)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount], file_type=vortex +23)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] diff --git a/vortex-sqllogictest/slt/tpch/datafusion/plans/q9.slt.no b/vortex-sqllogictest/slt/tpch/datafusion/plans/q9.slt.no index 21caa151514..efa7f38afa2 100644 --- a/vortex-sqllogictest/slt/tpch/datafusion/plans/q9.slt.no +++ b/vortex-sqllogictest/slt/tpch/datafusion/plans/q9.slt.no @@ -78,7 +78,7 @@ physical_plan 16)------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:], [${WORK_DIR}/partsupp.vortex:]]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], file_type=vortex 17)----------------------RepartitionExec: partitioning=Hash([l_suppkey@2, l_partkey@1], 4), input_partitions=4 18)------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(s_suppkey@0, l_suppkey@2)], projection=[l_orderkey@2, l_partkey@3, l_suppkey@4, l_quantity@5, l_extendedprice@6, l_discount@7, s_nationkey@1] -19)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex +19)--------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/supplier.vortex]]}, projection=[s_suppkey, s_nationkey], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] 20)--------------------------HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_partkey@2, l_suppkey@3, l_quantity@4, l_extendedprice@5, l_discount@6] 21)----------------------------DataSourceExec: file_groups={1 group: [[${WORK_DIR}/part.vortex]]}, projection=[p_partkey], file_type=vortex, predicate: p_name@1 LIKE %green% -22)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount], file_type=vortex +22)----------------------------DataSourceExec: file_groups={4 groups: [[${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:], [${WORK_DIR}/lineitem.vortex:]]}, projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount], file_type=vortex, dynamic_filter: DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ] AND DynamicFilter [ empty ]